{"id":4614,"date":"2026-06-24T03:37:34","date_gmt":"2026-06-24T03:37:34","guid":{"rendered":"https:\/\/allenglish4u.com\/cambridge-ket-7-test-4-rw\/"},"modified":"2026-07-05T02:44:03","modified_gmt":"2026-07-05T02:44:03","slug":"cambridge-ket-7-test-4-rw","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/cambridge-ket-7-test-4-rw\/","title":{"rendered":"Cambridge KET 7 Test 4 \u2013 Reading &#038; Writing"},"content":{"rendered":"\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@400%3B500%3B600%3B700%3B800&family=Fraunces:opsz,wght@9..144,700&display=swap');\n\n\/* escape WP wrapper *\/\n.entry-content,.wp-block-post-content,.is-layout-constrained{max-width:none !important;width:auto !important;margin-left:0 !important;margin-right:0 !important;padding-left:0 !important;padding-right:0 !important;}\n.wp-block-post-title{display:none !important;}\n\n:root{\n  --accent-1:#F97316;\n  --accent-2:#F43F5E;\n  --gold:#F9C74F;\n  --green:#10B981;\n  --red:#EF4444;\n  --light-1:#FFF7ED;\n  --light-2:#FFFBF5;\n  --white:#FFFFFF;\n  --text:#0F172A;\n  --muted:#475569;\n  --subtle:#64748B;\n  --border:#E2E8F0;\n  --dark-1:#1B0F02;\n  --dark-2:#2D1A06;\n  --r-10:10px; --r-16:16px; --r-22:22px;\n  --sh-card:0 2px 8px rgba(0,0,0,.06);\n  --sh-lg:0 12px 40px rgba(0,0,0,.12);\n}\n*{margin:0;padding:0;box-sizing:border-box}\nhtml{scroll-behavior:smooth}\nbody{\n  font-family:'Plus Jakarta Sans',system-ui,sans-serif !important;\n  color:var(--text);\n  background:var(--light-2);\n  -webkit-font-smoothing:antialiased;\n  overflow-x:hidden;\n}\n.serif{font-family:'Fraunces',Georgia,serif !important;font-weight:700;letter-spacing:-.01em}\n.wrap{max-width:1080px;margin:0 auto;padding:0 24px}\na{color:inherit;text-decoration:none}\nbutton{font-family:inherit !important;cursor:pointer;border:none;background:none}\n\n\/* HEADER (same pattern as cambridge index) *\/\n.header{position:fixed;top:0;left:0;right:0;z-index:100;transition:background .28s ease,box-shadow .28s ease;border-bottom:1px solid transparent;}\n.header.solid{background:rgba(255,255,255,.92);backdrop-filter:saturate(180%) blur(16px);border-bottom:1px solid var(--border);box-shadow:0 1px 0 rgba(15,23,42,.02);}\n.header-inner{display:flex;align-items:center;gap:28px;height:72px;max-width:1200px;margin:0 auto;padding:0 24px}\n.brand{display:flex;align-items:center;gap:11px;flex-shrink:0}\n.brand img{width:40px;height:40px;border-radius:11px;object-fit:cover;box-shadow:var(--sh-card)}\n.brand-name{font-weight:800;font-size:18px;letter-spacing:-.02em;color:#fff;transition:color .28s ease}\n.header.solid .brand-name{color:var(--text)}\n.nav{display:flex;align-items:center;gap:4px;margin-left:8px}\n.nav a{position:relative;padding:9px 13px;font-size:14.5px;font-weight:600;color:rgba(255,255,255,.82);border-radius:var(--r-10);transition:color .16s ease,background .16s ease;}\n.nav a:hover{color:#fff;background:rgba(255,255,255,.08)}\n.header.solid .nav a{color:var(--muted)}\n.header.solid .nav a:hover{color:var(--text);background:var(--light-1)}\n.header-right{margin-left:auto;display:flex;align-items:center;gap:10px}\n.btn-back{display:inline-flex;align-items:center;gap:7px;padding:9px 16px;border-radius:999px;font-weight:700;font-size:14px;background:rgba(255,255,255,.14);color:#fff;border:1px solid rgba(255,255,255,.22);transition:background .16s ease}\n.btn-back:hover{background:rgba(255,255,255,.22)}\n.header.solid .btn-back{background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;border-color:transparent}\n.hamburger{display:none;width:40px;height:40px;border-radius:50%;color:#fff;align-items:center;justify-content:center}\n.header.solid .hamburger{color:var(--text)}\n\n\/* HERO *\/\n.hero{\n  position:relative;min-height:380px;padding:120px 0 60px;\n  background:linear-gradient(135deg,#FB923C 0%,#F43F5E 55%,#7C2D12 100%);\n  color:#fff;overflow:hidden;\n}\n.hero::before{content:\"\";position:absolute;inset:0;background-image:radial-gradient(circle at 20% 30%,rgba(255,255,255,.15) 0%,transparent 50%),radial-gradient(circle at 80% 70%,rgba(255,255,255,.10) 0%,transparent 50%);pointer-events:none}\n.hero .wrap{position:relative;z-index:1}\n.kicker{display:inline-block;font-size:12px;letter-spacing:.18em;text-transform:uppercase;font-weight:700;opacity:.92;margin-bottom:14px}\n.hero h1{font-size:clamp(34px,5vw,52px);line-height:1.05;margin-bottom:14px}\n.hero h1 span{font-style:italic;color:var(--gold)}\n.hero p.sub{font-size:17px;line-height:1.6;max-width:680px;opacity:.95;margin-bottom:22px}\n.hero-meta{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:24px}\n.meta-pill{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:999px;background:rgba(255,255,255,.18);backdrop-filter:blur(6px);border:1px solid rgba(255,255,255,.24);font-size:13px;font-weight:600}\n.meta-pill .dot{width:6px;height:6px;border-radius:50%;background:var(--gold)}\n.cta-row{display:flex;gap:12px;flex-wrap:wrap}\n.btn-primary{display:inline-flex;align-items:center;gap:8px;padding:13px 22px;border-radius:999px;background:#fff;color:var(--text);font-weight:700;font-size:15px;box-shadow:0 10px 30px rgba(0,0,0,.2);transition:transform .16s ease}\n.btn-primary:hover{transform:translateY(-2px)}\n.btn-ghost{display:inline-flex;align-items:center;gap:8px;padding:13px 22px;border-radius:999px;background:rgba(255,255,255,.12);color:#fff;font-weight:700;font-size:15px;border:1px solid rgba(255,255,255,.32);transition:background .16s ease}\n.btn-ghost:hover{background:rgba(255,255,255,.22)}\n\n\/* SCORE BAR *\/\n.score-bar{\n  position:sticky;top:72px;z-index:50;\n  background:rgba(255,255,255,.96);backdrop-filter:blur(12px);\n  border-bottom:1px solid var(--border);\n  padding:14px 0;\n}\n.sb-inner{display:flex;align-items:center;gap:16px;flex-wrap:wrap}\n.sb-prog{flex:1;min-width:200px}\n.sb-prog-bar{height:8px;background:var(--light-1);border-radius:999px;overflow:hidden}\n.sb-prog-fill{height:100%;background:linear-gradient(90deg,var(--accent-1),var(--accent-2));border-radius:999px;transition:width .3s ease;width:0}\n.sb-prog-label{font-size:12px;color:var(--muted);margin-top:5px;font-weight:600}\n.sb-score{display:flex;align-items:center;gap:10px;font-weight:700;font-size:14.5px;color:var(--text)}\n.sb-score b{font-size:18px;color:var(--accent-1)}\n.btn-submit{display:inline-flex;align-items:center;gap:7px;padding:10px 18px;border-radius:999px;background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;font-weight:700;font-size:14px;box-shadow:0 6px 18px rgba(249,115,22,.32);transition:transform .15s ease,opacity .15s ease}\n.btn-submit:hover{transform:translateY(-1px)}\n.btn-submit:disabled{opacity:.6;cursor:not-allowed;transform:none}\n.btn-reset{padding:10px 16px;border-radius:999px;background:#fff;color:var(--muted);font-weight:600;font-size:13px;border:1px solid var(--border);transition:background .15s ease}\n.btn-reset:hover{background:var(--light-1);color:var(--text)}\n\n\/* PARTS *\/\n.part-section{padding:48px 0;border-bottom:1px solid var(--border)}\n.part-section:nth-of-type(even){background:#fff}\n.part-head{display:flex;align-items:flex-start;gap:18px;margin-bottom:24px}\n.part-num{\n  flex-shrink:0;width:60px;height:60px;border-radius:18px;\n  background:linear-gradient(135deg,var(--accent-1),var(--accent-2));\n  color:#fff;display:grid;place-items:center;\n  font-family:'Fraunces',serif !important;font-weight:700;font-size:26px;\n  box-shadow:0 8px 22px rgba(249,115,22,.3);\n}\n.part-head-text h2{font-size:26px;line-height:1.15;margin-bottom:6px}\n.part-head-text .qrange{display:inline-block;font-size:12.5px;font-weight:700;color:var(--accent-1);background:var(--light-1);padding:4px 10px;border-radius:999px;letter-spacing:.04em;margin-bottom:8px}\n.part-head-text p{color:var(--muted);font-size:15px;line-height:1.55;max-width:740px}\n\n\/* PART 1 &#8212; notice match *\/\n.notices-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;margin:20px 0 28px}\n.notice{\n  background:#fff;border:2px solid var(--border);border-radius:14px;padding:18px 14px;text-align:center;\n  font-weight:700;letter-spacing:.02em;color:var(--text);min-height:88px;display:grid;place-items:center;\n  font-size:14.5px;line-height:1.35;\n  box-shadow:0 1px 3px rgba(0,0,0,.04);\n}\n.notice-letter{position:absolute;top:6px;left:8px;font-size:11px;font-weight:800;color:var(--accent-1);background:var(--light-1);width:22px;height:22px;border-radius:50%;display:grid;place-items:center;}\n.notice{position:relative}\n\n\/* questions list *\/\n.q-list{display:flex;flex-direction:column;gap:14px;margin-top:8px}\n.q-item{\n  background:#fff;border:1px solid var(--border);border-radius:16px;padding:18px 20px;\n  display:flex;flex-direction:column;gap:12px;transition:border-color .2s ease,box-shadow .2s ease;\n}\n.q-item.correct{border-color:var(--green);box-shadow:0 0 0 3px rgba(16,185,129,.12)}\n.q-item.wrong{border-color:var(--red);box-shadow:0 0 0 3px rgba(239,68,68,.12)}\n.q-num{font-weight:800;color:var(--accent-1);font-size:14px;min-width:30px}\n.q-text{flex:1;font-size:15.5px;line-height:1.55;color:var(--text);display:flex;gap:10px;align-items:flex-start}\n.q-text b.qn{color:var(--accent-1);font-weight:800}\n.q-opts{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}\n.opt{\n  display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border-radius:10px;\n  background:#F8FAFF;border:1.5px solid var(--border);font-weight:600;font-size:14px;color:var(--text);\n  cursor:pointer;transition:all .15s ease;user-select:none;\n}\n.opt:hover{background:var(--light-1);border-color:var(--accent-1)}\n.opt input{display:none}\n.opt .opt-letter{font-weight:800;color:var(--accent-1);background:#fff;width:22px;height:22px;border-radius:6px;display:grid;place-items:center;font-size:12.5px;border:1px solid var(--border)}\n.opt.selected{background:linear-gradient(100deg,rgba(249,115,22,.12),rgba(244,63,94,.12));border-color:var(--accent-1)}\n.opt.selected .opt-letter{background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;border-color:transparent}\n.opt.correct-opt{background:rgba(16,185,129,.12) !important;border-color:var(--green) !important}\n.opt.correct-opt .opt-letter{background:var(--green) !important;color:#fff !important;border-color:transparent !important}\n.opt.wrong-opt{background:rgba(239,68,68,.10) !important;border-color:var(--red) !important}\n.opt.wrong-opt .opt-letter{background:var(--red) !important;color:#fff !important;border-color:transparent !important}\n.feedback{font-size:13px;font-weight:600;display:none;padding:8px 12px;border-radius:8px;margin-top:4px}\n.q-item.answered .feedback{display:block}\n.q-item.correct .feedback{background:rgba(16,185,129,.12);color:#065F46}\n.q-item.wrong .feedback{background:rgba(239,68,68,.10);color:#991B1B}\n\n\/* PART 2 \/ cloze with input *\/\n.input-blank{\n  display:inline-block;min-width:90px;border:none;border-bottom:2px dashed var(--accent-1);\n  background:transparent;font-family:inherit !important;font-size:15.5px;color:var(--text);font-weight:600;\n  padding:2px 6px;margin:0 4px;text-align:center;outline:none;\n}\n.input-blank:focus{border-bottom-style:solid;background:var(--light-1)}\n.input-blank.correct{border-bottom-color:var(--green);color:#065F46;background:rgba(16,185,129,.10)}\n.input-blank.wrong{border-bottom-color:var(--red);color:#991B1B;background:rgba(239,68,68,.08)}\n\n\/* PART 4 &#8212; passage *\/\n.passage{\n  background:#fff;border:1px solid var(--border);border-radius:18px;\n  padding:24px 26px;margin:8px 0 20px;\n  font-size:15.5px;line-height:1.7;color:var(--text);\n  box-shadow:var(--sh-card);\n  position:relative;\n}\n.passage h3{font-family:'Fraunces',serif !important;font-size:22px;text-align:center;margin-bottom:14px;letter-spacing:.02em;color:var(--accent-2)}\n.passage p{margin-bottom:10px}\n\n\/* PART 5 &#8212; cloze passage *\/\n.cloze-passage{\n  background:#fff;border:1px solid var(--border);border-radius:18px;padding:22px 26px;\n  font-size:16px;line-height:1.8;color:var(--text);box-shadow:var(--sh-card);margin-bottom:24px;\n}\n.cloze-passage h3{font-family:'Fraunces',serif !important;font-size:24px;text-align:center;color:var(--accent-2);margin-bottom:14px}\n\n\/* PART 6 &#8212; single word with first letter *\/\n.word-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}\n.first-letter{font-weight:700;color:var(--accent-1);font-size:18px;font-family:'Fraunces',serif}\n.dashes{color:var(--muted);letter-spacing:6px;font-weight:600}\n\n\/* PART 8 &#8212; form *\/\n.form-card{background:#fff;border:1.5px solid var(--border);border-radius:16px;padding:22px;margin-top:18px;max-width:560px}\n.form-card h4{font-family:'Fraunces',serif !important;font-size:20px;text-align:center;color:var(--accent-2);margin-bottom:6px;border-bottom:2px solid var(--accent-1);padding-bottom:8px;display:inline-block;width:100%}\n.form-row{display:flex;gap:12px;align-items:center;margin-top:14px;flex-wrap:wrap}\n.form-row label{flex:0 0 200px;font-weight:600;color:var(--text);font-size:14.5px}\n.form-row .input-blank{flex:1;min-width:200px;text-align:left;font-size:14.5px}\n\n\/* PART 9 &#8212; writing *\/\n.writing-card{background:#fff;border:1.5px solid var(--border);border-radius:16px;padding:22px;margin-top:18px}\n.prompt-box{background:var(--light-1);border-left:4px solid var(--accent-1);padding:14px 18px;border-radius:0 12px 12px 0;margin-bottom:18px;font-size:15px;line-height:1.6}\n.prompt-box ul{margin:10px 0 4px 22px}\n.prompt-box li{margin-bottom:4px}\n.writing-area{width:100%;min-height:160px;padding:14px;font-family:inherit !important;font-size:15px;line-height:1.55;border:2px solid var(--border);border-radius:12px;background:#FAFBFC;color:var(--text);outline:none;resize:vertical;transition:border-color .2s ease}\n.writing-area:focus{border-color:var(--accent-1);background:#fff}\n.wc-counter{display:flex;justify-content:space-between;margin-top:8px;font-size:13px;color:var(--muted);font-weight:600}\n.wc-counter.ok{color:var(--green)}\n.wc-counter.over{color:var(--red)}\n.sample-toggle{margin-top:14px;display:inline-flex;align-items:center;gap:7px;padding:9px 16px;border-radius:999px;background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;font-weight:700;font-size:13.5px;border:none;cursor:pointer}\n.sample-box{display:none;margin-top:14px;padding:14px 18px;background:#FEF3C7;border-left:4px solid var(--gold);border-radius:0 12px 12px 0;font-size:14.5px;line-height:1.6}\n.sample-box.show{display:block}\n.sample-box h5{font-family:'Fraunces',serif !important;font-size:16px;margin-bottom:8px;color:#92400E}\n\n\/* SHOW ANSWER PER-Q BUTTONS *\/\n.show-ans-btn{\n  display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:8px;\n  background:rgba(249,115,22,.10);color:var(--accent-1);font-weight:700;font-size:12px;\n  border:1px solid rgba(249,115,22,.30);cursor:pointer;transition:all .15s ease;\n  font-family:inherit !important;align-self:flex-start;margin-top:4px;letter-spacing:.02em;\n}\n.show-ans-btn:hover{background:rgba(249,115,22,.18);border-color:var(--accent-1)}\n.show-ans-btn[disabled]{opacity:.45;cursor:not-allowed}\n.show-ans-btn .emoji{width:14px;height:14px}\n.show-ans-btn-inline{\n  display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:6px;\n  background:rgba(249,115,22,.10);color:var(--accent-1);font-weight:700;font-size:11.5px;\n  border:1px solid rgba(249,115,22,.28);cursor:pointer;font-family:inherit !important;\n  margin-left:4px;vertical-align:middle;transition:all .15s ease;\n}\n.show-ans-btn-inline:hover{background:rgba(249,115,22,.18)}\n.show-ans-btn-inline[disabled]{opacity:.45;cursor:not-allowed}\n\n\/* RESULTS BANNER *\/\n.results-banner{\n  display:none;margin:32px auto;padding:30px;border-radius:22px;\n  background:linear-gradient(135deg,#FB923C,#F43F5E);color:#fff;text-align:center;max-width:720px;\n  box-shadow:0 16px 50px rgba(249,115,22,.3);\n}\n.results-banner.show{display:block}\n.results-banner h3{font-size:30px;font-family:'Fraunces',serif !important;margin-bottom:10px}\n.results-banner .score-big{font-size:64px;font-weight:800;line-height:1;margin:14px 0;font-family:'Fraunces',serif}\n.results-banner p{opacity:.95;font-size:15px}\n\n\/* FOOTER *\/\n.footer{background:var(--dark-1);color:#9CA3AF;padding:36px 0;text-align:center;font-size:13.5px}\n.footer a{color:var(--gold);font-weight:600}\n\n\/* MOBILE *\/\n@media (max-width:820px){\n  .nav{display:none}\n  .hamburger{display:flex}\n  .hero{padding:110px 0 50px}\n  .part-head{flex-direction:column;gap:12px}\n  .part-num{width:50px;height:50px;font-size:22px}\n  .notices-grid{grid-template-columns:repeat(2,1fr)}\n  .form-row label{flex:1 1 100%}\n  .form-row .input-blank{width:100%}\n  .sb-inner{gap:10px}\n  .sb-prog{order:3;flex:1 1 100%}\n}\n\n\/* mobile drawer *\/\n.drawer{position:fixed;inset:0;background:rgba(15,23,42,.65);z-index:200;display:none;align-items:flex-start;justify-content:flex-end}\n.drawer.open{display:flex}\n.drawer-panel{width:280px;background:#fff;height:100%;padding:24px;display:flex;flex-direction:column;gap:8px}\n.drawer-panel a{padding:12px 14px;border-radius:10px;font-weight:600;color:var(--text)}\n.drawer-panel a:hover{background:var(--light-1)}\n.drawer-close{align-self:flex-end;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;color:var(--muted)}\n\n\/* Submit panel *\/\n.submit-panel{margin:40px auto 24px;background:linear-gradient(135deg,#fff,var(--light-1));border:1.5px solid var(--border);padding:30px;border-radius:22px;text-align:center;max-width:720px;box-shadow:0 4px 20px rgba(0,0,0,.06)}\n.submit-panel h3{font-family:'Fraunces',serif !important;font-size:24px;margin-bottom:8px;color:var(--text)}\n.submit-panel p.intro{color:var(--muted);margin-bottom:18px;font-size:14.5px}\n.submit-panel .sp-buttons{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}\n.btn-submit-big{display:inline-flex;align-items:center;gap:8px;padding:14px 28px;border-radius:999px;background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;font-weight:800;font-size:16px;box-shadow:0 10px 26px rgba(139,92,246,.35);cursor:pointer;transition:transform .15s ease}\n.btn-submit-big:hover{transform:translateY(-2px)}\n.btn-reset-big{padding:14px 24px;border-radius:999px;background:#fff;color:var(--text);font-weight:700;font-size:14.5px;border:1.5px solid var(--border);cursor:pointer}\n.btn-reset-big:hover{background:var(--light-1)}\n<\/style>\n\n<!-- HEADER -->\n<header class=\"header\" id=\"hdr\">\n  <div class=\"header-inner\">\n    <a href=\"https:\/\/allenglish4u.com\" class=\"brand\">\n      <img decoding=\"async\" src=\"https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Transparent-background-MacBook-Pro-cua-Hang.png\" alt=\"AE4U\">\n      <span class=\"brand-name\">All English 4U<\/span>\n    <\/a>\n    <nav class=\"nav\">\n      <a href=\"https:\/\/allenglish4u.com\/grammar\/\">Grammar<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/ielts\/\">IELTS<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/toefl\/\">TOEFL<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/cambridge\/\" class=\"active\">Cambridge<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/celpip\/\">CELPIP<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/dictation\/\">Dictation<\/a>\n      <\/nav>\n    <div class=\"header-right\">\n      <a href=\"https:\/\/allenglish4u.com\/cambridge\/\" class=\"btn-back\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M19 12H5M11 18l-6-6 6-6\"\/><\/svg>\n        Back\n      <\/a>\n      <button class=\"hamburger\" id=\"hamb\" aria-label=\"Menu\">\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.3\" stroke-linecap=\"round\"><path d=\"M3 6h18M3 12h18M3 18h18\"\/><\/svg>\n      <\/button>\n    <\/div>\n  <\/div>\n<\/header>\n\n<div class=\"drawer\" id=\"drawer\">\n  <div class=\"drawer-panel\">\n    <button class=\"drawer-close\" id=\"drawerClose\" aria-label=\"Close\">\n      <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.3\" stroke-linecap=\"round\"><path d=\"M18 6L6 18M6 6l12 12\"\/><\/svg>\n    <\/button>\n    <a href=\"https:\/\/allenglish4u.com\/grammar\/\">Grammar<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/ielts\/\">IELTS<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/toefl\/\">TOEFL<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/cambridge\/\">Cambridge<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/celpip\/\">CELPIP<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/dictation\/\">Dictation<\/a>\n    <\/div>\n<\/div>\n\n<!-- HERO -->\n<section class=\"hero\">\n  <div class=\"wrap\">\n    <span class=\"kicker\">Cambridge English &#183; Key (KET)<\/span>\n    <h1 class=\"serif\">KET 7 &#8212; Test 4<br><span>Reading &amp; Writing<\/span><\/h1>\n    <p class=\"sub\">Practise the full A2 Key Reading &amp; Writing paper &#8212; 9 parts, 56 questions, instant auto-grading. Test yourself like the real exam, then check answers and learn from instant feedback.<\/p>\n    <div class=\"hero-meta\">\n      <span class=\"meta-pill\"><span class=\"dot\"><\/span>1 hour 10 minutes<\/span>\n      <span class=\"meta-pill\"><span class=\"dot\"><\/span>9 Parts<\/span>\n      <span class=\"meta-pill\"><span class=\"dot\"><\/span>55 auto-graded<\/span>\n      <span class=\"meta-pill\"><span class=\"dot\"><\/span>+ Writing prompt<\/span>\n    <\/div>\n    <div class=\"cta-row\">\n      <a href=\"#part1\" class=\"btn-primary\">\n        Start Test\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>\n      <\/a>\n      <a href=\"https:\/\/allenglish4u.com\/cambridge\/\" class=\"btn-ghost\">All Cambridge Tests<\/a>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- SCORE BAR -->\n<div class=\"score-bar\" id=\"scoreBar\">\n  <div class=\"wrap sb-inner\">\n    <div class=\"sb-score\">Score <b><span id=\"scoreNow\">0<\/span>\/55<\/b><\/div>\n    <div class=\"sb-prog\">\n      <div class=\"sb-prog-bar\"><div class=\"sb-prog-fill\" id=\"progFill\"><\/div><\/div>\n      <div class=\"sb-prog-label\"><span id=\"answeredCount\">0<\/span> of 55 answered<\/div>\n    <\/div>\n    <button class=\"btn-submit\" id=\"submitBtn\">\n      <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>\n      Submit &amp; Grade\n    <\/button>\n    <button class=\"btn-reset\" id=\"resetBtn\">Reset<\/button>\n  <\/div>\n<\/div>\n\n<!-- ============== PART 1 ============== -->\n<section class=\"part-section\" id=\"part1\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">1<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 1&#8211;5<\/span>\n        <h2 class=\"serif\">Match the notice<\/h2>\n        <p>Which notice (A&#8211;H) says this (1&#8211;5)? For questions 1&#8211;5, choose the correct letter A&#8211;H.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"notices-grid\">\n      <div class=\"notice\"><span class=\"notice-letter\">A<\/span>Arabic and French dictionaries for sale<br><sub style=\"font-size:11px;font-weight:600\">Great prices! Contact David<\/sub><\/div>\n      <div class=\"notice\"><span class=\"notice-letter\">B<\/span><b>Student caf&#233;<\/b><br><sub style=\"font-size:11px;font-weight:600\">Hot meals served until 10 p.m. everyday<\/sub><\/div>\n      <div class=\"notice\"><span class=\"notice-letter\">C<\/span><b>Learning Centre<\/b><br><sub style=\"font-size:11px;font-weight:600\">Every student can borrow up to 3 books<\/sub><\/div>\n      <div class=\"notice\"><span class=\"notice-letter\">D<\/span><b>Closed for cleaning<\/b><br><sub style=\"font-size:11px;font-weight:600\">Please use toilets upstairs near the caf&#233;<\/sub><\/div>\n      <div class=\"notice\"><span class=\"notice-letter\">E<\/span>With every coffee, get a sandwich for &#163;1!<br><sub style=\"font-size:11px;font-weight:600\">(normal price &#163;2.50)<\/sub><\/div>\n      <div class=\"notice\"><span class=\"notice-letter\">F<\/span><b>Football practice<\/b><br><sub style=\"font-size:11px;font-weight:600\">Wednesday 7 p.m.&#8211;8 p.m. &#183; Call Bryan on 5488 967622<\/sub><\/div>\n      <div class=\"notice\"><span class=\"notice-letter\">G<\/span><b>College Gym<\/b><br><sub style=\"font-size:11px;font-weight:600\">Join now for 12 months and only pay for 10<\/sub><\/div>\n      <div class=\"notice\" style=\"opacity:.55\"><span class=\"notice-letter\">H<\/span><b>College Caf&#233;<\/b><br><sub style=\"font-size:11px;font-weight:600\">Sorry, cash only &#8211; no credit cards<\/sub><br><sub style=\"font-size:10px;color:var(--muted);font-style:italic;font-weight:600\">(example)<\/sub><\/div>\n    <\/div>\n\n    <div class=\"q-list\" id=\"part1List\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 2 ============== -->\n<section class=\"part-section\" id=\"part2\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">2<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 6&#8211;10<\/span>\n        <h2 class=\"serif\">Going to the theatre<\/h2>\n        <p>Read the sentences (6&#8211;10) about going to the theatre. Choose the best word (A, B or C) for each space.<\/p>\n      <\/div>\n    <\/div>\n    <div style=\"background:#fff;border:1px solid var(--border);border-radius:14px;padding:14px 18px;margin-bottom:18px;font-size:14.5px;color:var(--muted)\">\n      <b style=\"color:var(--accent-1)\">Example:<\/b> Helen <u>wanted<\/u> to go to the theatre with a friend. <b>(Answer: C)<\/b>\n    <\/div>\n    <div class=\"q-list\" id=\"part2List\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 3a ============== -->\n<section class=\"part-section\" id=\"part3a\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">3<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 11&#8211;15<\/span>\n        <h2 class=\"serif\">Complete the conversations<\/h2>\n        <p>Complete the five conversations. Choose the correct answer (A, B or C).<\/p>\n      <\/div>\n    <\/div>\n    <div style=\"background:#fff;border:1px solid var(--border);border-radius:14px;padding:14px 18px;margin-bottom:18px;font-size:14.5px;color:var(--muted)\">\n      <b style=\"color:var(--accent-1)\">Example:<\/b> Where do you come from? &#8212; <b>A<\/b> New York.\n    <\/div>\n    <div class=\"q-list\" id=\"part3aList\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 3b ============== -->\n<section class=\"part-section\" id=\"part3b\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">3<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 16&#8211;20<\/span>\n        <h2 class=\"serif\">Going to a concert: Lisa &amp; Danika<\/h2>\n        <p>Complete the conversation. What does Danika say to Lisa? For each blank, choose the correct letter A&#8211;H.<\/p>\n      <\/div>\n    <\/div>\n\n    <div style=\"background:#fff;border:1px solid var(--border);border-radius:14px;padding:18px 22px;margin-bottom:18px;font-size:14.5px;line-height:1.7\">\n      <p><b>Lisa:<\/b> Are you busy this Saturday?<\/p>\n      <p><b>Danika:<\/b> <span style=\"color:var(--accent-1);font-weight:700\">(Example: D)<\/span><\/p>\n      <p><b>Lisa:<\/b> Would you like to go to a concert?<\/p>\n      <p><b>Danika:<\/b> <select class=\"q-select\" data-qid=\"16\"><option value=\"\">&#8212; choose &#8212;<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option><\/select><\/p>\n      <p><b>Lisa:<\/b> Well, &#8216;Rex&#8217; are playing in town this weekend.<\/p>\n      <p><b>Danika:<\/b> <select class=\"q-select\" data-qid=\"17\"><option value=\"\">&#8212; choose &#8212;<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option><\/select><\/p>\n      <p><b>Lisa:<\/b> Lots of times! You should listen to them online before we go.<\/p>\n      <p><b>Danika:<\/b> <select class=\"q-select\" data-qid=\"18\"><option value=\"\">&#8212; choose &#8212;<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option><\/select><\/p>\n      <p><b>Lisa:<\/b> We&#8217;ll need to. Lots of people will want to go. I can get them on Wednesday.<\/p>\n      <p><b>Danika:<\/b> <select class=\"q-select\" data-qid=\"19\"><option value=\"\">&#8212; choose &#8212;<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option><\/select><\/p>\n      <p><b>Lisa:<\/b> Great. Shall I meet you at the train station on Saturday at about 8 p.m.?<\/p>\n      <p><b>Danika:<\/b> <select class=\"q-select\" data-qid=\"20\"><option value=\"\">&#8212; choose &#8212;<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option><\/select><\/p>\n      <p><b>Lisa:<\/b> Sure, no problem. It will be awesome!<\/p>\n    <\/div>\n\n    <div style=\"background:#fff;border:1px solid var(--border);border-radius:14px;padding:18px 22px;font-size:14px;line-height:1.85\">\n      <b style=\"color:var(--accent-1);display:block;margin-bottom:6px\">Choices:<\/b>\n      <div><b>A<\/b> Can we make it half an hour earlier?<\/div>\n      <div><b>B<\/b> Alright, I&#8217;ll give you the money tomorrow.<\/div>\n      <div><b>C<\/b> Have you seen them before?<\/div>\n      <div style=\"opacity:.5\"><b>D<\/b> No, I&#8217;m not doing anything. Why? <i>(example)<\/i><\/div>\n      <div><b>E<\/b> Are they playing at the same time on Sunday?<\/div>\n      <div><b>F<\/b> That sounds like a great idea! Who do you want to see?<\/div>\n      <div><b>G<\/b> OK, I&#8217;ll do that. Shall we book tickets?<\/div>\n      <div><b>H<\/b> It&#8217;s not too expensive, is it?<\/div>\n    <\/div>\n\n    <div id=\"part3bFeedback\" style=\"margin-top:14px\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 4 ============== -->\n<section class=\"part-section\" id=\"part4\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">4<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 21&#8211;27<\/span>\n        <h2 class=\"serif\">David Rawson<\/h2>\n        <p>Read the article about a teenage rower. Are sentences 21&#8211;27 <b>&#8216;Right&#8217; (A)<\/b> or <b>&#8216;Wrong&#8217; (B)<\/b>? If there is not enough information to answer &#8216;Right&#8217; or &#8216;Wrong&#8217;, choose <b>&#8216;Doesn&#8217;t say&#8217; (C)<\/b>.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"passage\">\n      <h3>David Rawson<\/h3>\n      <p>David Rawson, 15, is one of the best rowers of his age in the USA. He comes from Connecticut, and spends most of his free time practising on the many rivers near his home.<\/p>\n      <p>David&#8217;s dad Martin also enjoys rowing. &#8216;David&#8217;s much better than me, but I go with him when I can,&#8217; he says. David&#8217;s mother, Wendy, doesn&#8217;t go rowing herself but she&#8217;s happy to take them to and from the rivers in her car.<\/p>\n      <p>It&#8217;s an expensive sport. The Rawsons have seven boats, costing between $1500 and $4000 each. But you can see how important rowing is to the family when you go to their home. There are many photos of David rowing and several rowing boats in the garage.<\/p>\n      <p>About 18 months ago, David started rowing on the sea. This sport is similar to surfing except that you sit in a special boat instead of standing on a board. David loves it; and it means he can continue with his sport in the summer when his favourite rivers don&#8217;t have enough water in them.<\/p>\n      <p>Next year David is hoping to go to the Premier Rowing Academy where he&#8217;ll study rowing as well as all the usual school subjects.<\/p>\n    <\/div>\n\n    <div style=\"background:#fff;border:1px solid var(--border);border-radius:14px;padding:12px 18px;margin-bottom:18px;font-size:14px;color:var(--muted)\">\n      <b style=\"color:var(--accent-1)\">Example (0):<\/b> David Rawson is better than most other rowers of his age in his country. &#8594; <b>A (Right)<\/b>\n    <\/div>\n\n    <div class=\"q-list\" id=\"part4List\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 5 ============== -->\n<section class=\"part-section\" id=\"part5\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">5<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 28&#8211;35<\/span>\n        <h2 class=\"serif\">Emperor Penguins &#8212; gap fill<\/h2>\n        <p>Read the article about Emperor penguins. Choose the best word (A, B or C) for each space.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"cloze-passage\">\n      <h3>Emperor Penguins<\/h3>\n      <p>There are seventeen kinds of penguins <u><b style=\"color:var(--accent-1)\">in<\/b><\/u> the world. Emperor penguins are the <span data-q=\"28\" class=\"cloze-blank\">[28]<\/span> of them all. They spend <span data-q=\"29\" class=\"cloze-blank\">[29]<\/span> lives in the Antarctic and are the only animals to stay there <span data-q=\"30\" class=\"cloze-blank\">[30]<\/span> the winter. Other animals find it <span data-q=\"31\" class=\"cloze-blank\">[31]<\/span> cold.<\/p>\n      <p>The female Emperor penguin lays one egg in winter. Then she leaves to go and <span data-q=\"32\" class=\"cloze-blank\">[32]<\/span> fish. The male keeps the egg with him on the ice. He <span data-q=\"33\" class=\"cloze-blank\">[33]<\/span> to keep it warm. He does this by putting it on his feet.<\/p>\n      <p>He looks after the egg <span data-q=\"34\" class=\"cloze-blank\">[34]<\/span> the baby penguin comes out, <span data-q=\"35\" class=\"cloze-blank\">[35]<\/span> usually takes about 65 days. Around that time, the female Emperor penguin returns to look after the baby chick. The hungry male can finally go into the sea to eat some fish.<\/p>\n    <\/div>\n\n    <div class=\"q-list\" id=\"part5List\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 6 ============== -->\n<section class=\"part-section\" id=\"part6\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">6<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 36&#8211;40<\/span>\n        <h2 class=\"serif\">Birthday party words &#8212; spell the word<\/h2>\n        <p>Read the descriptions (36&#8211;40) of some words about a birthday party. The first letter is given. Type the word. <b>Example (0):<\/b> You listen to this when you dance. &#8594; <b>music<\/b><\/p>\n      <\/div>\n    <\/div>\n    <div class=\"q-list\" id=\"part6List\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 7 ============== -->\n<section class=\"part-section\" id=\"part7\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">7<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 41&#8211;50<\/span>\n        <h2 class=\"serif\">Complete this email<\/h2>\n        <p>Read the email from Rosario to her friend Melissa. Type <b>ONE word<\/b> for each space (41&#8211;50). (Example: <i>in<\/i>)<\/p>\n      <\/div>\n    <\/div>\n\n    <div style=\"max-width:600px;margin:0 auto\">\n      <div style=\"background:#fff;border:1.5px solid var(--border);border-radius:16px;padding:24px 26px;font-size:14.5px;line-height:1.95;font-family:'Courier New',monospace\">\n        <div style=\"border-bottom:1px solid var(--border);padding-bottom:8px;margin-bottom:12px\"><b>From:<\/b> Rosario<br><b>To:<\/b> Melissa<\/div>\n        <p>Dear Melissa,<\/p>\n        <p>How are things (Example: <u>in<\/u>) London? I had a great time staying with you. Thank you for looking after <input class=\"input-blank\" data-q=\"41\" type=\"text\">. You are <input class=\"input-blank\" data-q=\"42\" type=\"text\"> great cook and your family were really kind to me. And my English is much better now <input class=\"input-blank\" data-q=\"43\" type=\"text\"> it was before.<\/p>\n        <p>My flight home was fine &#8211; there were <input class=\"input-blank\" data-q=\"44\" type=\"text\"> delays at all. It&#8217;s good to be back, but I miss you all very <input class=\"input-blank\" data-q=\"45\" type=\"text\">!<\/p>\n        <p><input class=\"input-blank\" data-q=\"46\" type=\"text\"> you remember my friend Jenny? I think she came <input class=\"input-blank\" data-q=\"47\" type=\"text\"> visit me at your house once <input class=\"input-blank\" data-q=\"48\" type=\"text\"> twice. Well, she took some great photos <input class=\"input-blank\" data-q=\"49\" type=\"text\"> us on our last day at the language school. I&#8217;m sending you one with this email. I hope you like <input class=\"input-blank\" data-q=\"50\" type=\"text\">!<\/p>\n        <p>Rosario<\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 8 ============== -->\n<section class=\"part-section\" id=\"part8\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">8<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 51&#8211;55<\/span>\n        <h2 class=\"serif\">Sophie&#8217;s notes &#8212; trip to bookshop<\/h2>\n        <p>Read the advertisement and the email. Fill in the information in Sophie&#8217;s notes (51&#8211;55).<\/p>\n      <\/div>\n    <\/div>\n\n    <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;margin-bottom:18px\">\n      <div style=\"background:#fff;border:2px solid var(--text);border-radius:12px;padding:16px 18px;font-size:14px;line-height:1.6;height:fit-content\">\n        <div style=\"text-align:center;font-weight:800;letter-spacing:.03em\">Hill&#8217;s bookshop<\/div>\n        <div style=\"text-align:center;font-style:italic\">Just arrived!<\/div>\n        <div style=\"margin-top:8px\"><b>Better Photos<\/b>, by David Fox, writer of last year&#8217;s best-selling book &#8216;Learn Photography&#8217;.<\/div>\n        <div style=\"margin-top:8px\">Usual price &#8211; &#163;15.00<br>Buy here for <b>&#163;12.50<\/b><\/div>\n        <div style=\"margin-top:8px;font-style:italic\">&#8216;This book&#8217;s great!&#8217; said fashion photographer Jenny Clarke.<\/div>\n      <\/div>\n      <div style=\"background:#fff;border:1.5px solid var(--border);border-radius:16px;padding:16px 18px;font-size:14px;line-height:1.6\">\n        <div style=\"border-bottom:1px solid var(--border);padding-bottom:8px;margin-bottom:10px\"><b>From:<\/b> Ben<br><b>To:<\/b> Sophie<\/div>\n        <p style=\"margin-bottom:0\">My mum wants David Fox&#8217;s latest book for her birthday. Can you get it from the bookshop near you? Her birthday&#8217;s on June 11, so I need it on June 10 please. If there&#8217;s a problem, call me at the office on 786 861. My new mobile number is 07920 3449.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"form-card\" style=\"max-width:620px\">\n      <h4>Sophie&#8217;s notes &#8212; Trip to bookshop<\/h4>\n      <div class=\"form-row\"><label>Name of bookshop:<\/label><span style=\"font-weight:600;color:var(--accent-2);font-style:italic\">Hill&#8217;s bookshop<\/span><\/div>\n      <div class=\"form-row\"><label>Name of book to buy:<\/label><input class=\"input-blank\" data-q=\"51\" type=\"text\"><\/div>\n      <div class=\"form-row\"><label>Price I&#8217;ll pay: &#163;<\/label><input class=\"input-blank\" data-q=\"52\" type=\"text\"><\/div>\n      <div class=\"form-row\"><label>Writer of book:<\/label><input class=\"input-blank\" data-q=\"53\" type=\"text\"><\/div>\n      <div class=\"form-row\"><label>Ben&#8217;s work number:<\/label><input class=\"input-blank\" data-q=\"54\" type=\"text\"><\/div>\n      <div class=\"form-row\"><label>Date Ben wants the book:<\/label><input class=\"input-blank\" data-q=\"55\" type=\"text\"><\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 9 &#8212; WRITING ============== -->\n<section class=\"part-section\" id=\"part9\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">9<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Question 56<\/span>\n        <h2 class=\"serif\">Writing &#8212; postcard to Jo<\/h2>\n        <p>This part is <b>not auto-graded<\/b>. Write your postcard, then click <i>Show Sample Answer<\/i> to see examples with examiner marks.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"writing-card\">\n      <div class=\"prompt-box\">\n        <b>You are on holiday. Write a postcard to your English friend, Jo.<\/b>\n        <ul>\n          <li>tell Jo <b>what you did<\/b> yesterday<\/li>\n          <li><b>describe<\/b> the weather<\/li>\n          <li>say <b>when<\/b> you are coming home<\/li>\n        <\/ul>\n        Write 25&#8211;35 words.\n      <\/div>\n      <textarea class=\"writing-area\" id=\"writingArea\" placeholder=\"Type your postcard here...\"><\/textarea>\n      <div class=\"wc-counter\" id=\"wcCounter\">0 words &#183; target 25&#8211;35<\/div>\n      <button class=\"sample-toggle\" id=\"sampleToggle\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"\/><circle cx=\"12\" cy=\"12\" r=\"3\"\/><\/svg>\n        Show Sample Answer\n      <\/button>\n      <div class=\"sample-box\" id=\"sampleBox\">\n        <h5 style=\"margin-bottom:14px\">Sample answers &#8212; with examiner marks<\/h5>\n\n        <div style=\"background:#fff;border-left:3px solid var(--green);padding:10px 14px;margin-bottom:12px;border-radius:0 8px 8px 0\">\n          <b style=\"color:var(--green);font-size:12.5px;letter-spacing:.05em\">SAMPLE A &#8212; Mark 5\/5 (all three points, no errors)<\/b>\n          <p style=\"margin-top:6px\">Hi Jo,<\/p>\n          <p>I&#8217;m having a great holiday! Yesterday I went to the beach and swam in the sea. The weather is hot and sunny every day. I&#8217;m coming home next Sunday. See you soon! Maria<\/p>\n        <\/div>\n\n        <div style=\"background:#fff;border-left:3px solid var(--accent-1);padding:10px 14px;margin-bottom:12px;border-radius:0 8px 8px 0\">\n          <b style=\"color:var(--accent-1);font-size:12.5px;letter-spacing:.05em\">SAMPLE B &#8212; Mark 4\/5 (some spelling &amp; grammar errors, but clear)<\/b>\n          <p style=\"margin-top:6px\">Hello Jo,<\/p>\n          <p>Yesterday I visit a big castle with my family. It was very interesting. The weather is rainy and cold here. I come back home on Friday. Miss you! Pablo<\/p>\n        <\/div>\n\n        <div style=\"background:#fff;border-left:3px solid var(--red);padding:10px 14px;border-radius:0 8px 8px 0\">\n          <b style=\"color:var(--red);font-size:12.5px;letter-spacing:.05em\">SAMPLE C &#8212; Mark 3\/5 (only two of the three points)<\/b>\n          <p style=\"margin-top:6px\">Dear Jo,<\/p>\n          <p>I&#8217;m on holiday in Spain. Yesterday we went to a water park and had so much fun on the slides. I&#8217;m coming home on Saturday afternoon. Write back soon! Lin<\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- RESULTS BANNER -->\n<div class=\"wrap\">\n  <div class=\"results-banner\" id=\"resultsBanner\">\n    <h3>Your KET 7 Test 4 &#8212; Reading &amp; Writing score<\/h3>\n    <div class=\"score-big\"><span id=\"finalScore\">0<\/span>\/55<\/div>\n    <p id=\"resultsMsg\">Great effort! Scroll up to review your answers &#8212; correct ones are highlighted in green and wrong ones in red.<\/p>\n    <div style=\"margin-top:18px\"><button class=\"btn-primary\" onclick=\"window.scrollTo({top:0,behavior:'smooth'})\" style=\"background:#fff;color:var(--accent-2)\">Back to top<\/button><\/div>\n  <\/div>\n<\/div>\n\n<!-- FOOTER -->\n<footer class=\"footer\">\n  <div class=\"wrap\">\n    <p>&#169; 2026 All English 4U &#183; <a href=\"https:\/\/allenglish4u.com\/cambridge\/\">All Cambridge Tests<\/a> &#183; <a href=\"https:\/\/allenglish4u.com\/contact\/\">Contact<\/a><\/p>\n  <\/div>\n<\/footer>\n\n<script>eval(atob('CihmdW5jdGlvbigpewovLyA9PT09PSBIZWFkZXIgc2Nyb2xsID09PT09CnZhciBoZHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hkcicpOwp2YXIgc2V0U29saWQ9ZnVuY3Rpb24oKXtpZih3aW5kb3cuc2Nyb2xsWT40MCloZHIuY2xhc3NMaXN0LmFkZCgnc29saWQnKTtlbHNlIGhkci5jbGFzc0xpc3QucmVtb3ZlKCdzb2xpZCcpfTsKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsc2V0U29saWQse3Bhc3NpdmU6dHJ1ZX0pO3NldFNvbGlkKCk7CgovLyBkcmF3ZXIKdmFyIGhhbWI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hhbWInKSxkcmF3ZXI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RyYXdlcicpLGRDbG9zZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHJhd2VyQ2xvc2UnKTsKaWYoaGFtYiloYW1iLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpe2RyYXdlci5jbGFzc0xpc3QuYWRkKCdvcGVuJyl9KTsKaWYoZENsb3NlKWRDbG9zZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXtkcmF3ZXIuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpfSk7CmlmKGRyYXdlcilkcmF3ZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpe2lmKGUudGFyZ2V0PT09ZHJhd2VyKWRyYXdlci5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyl9KTsKCi8vID09PT09IERBVEEgPT09PT0KdmFyIFAxID0gWwogIHtuOjEsdGV4dDonVGhpcyBpcyBjaGVhcGVyIHRoYW4gdXN1YWwgaWYgeW91IGJ1eSBzb21ldGhpbmcgZWxzZS4nLG9wdHM6J0FCQ0RFRkcnLGFuczonRSd9LAogIHtuOjIsdGV4dDonSWYgeW91IGJlY29tZSBhIG1lbWJlciwgeW91IHdpbGwgZ2V0IGEgZGlzY291bnQuJyxvcHRzOidBQkNERUZHJyxhbnM6J0cnfSwKICB7bjozLHRleHQ6J0lmIHlvdSB3YW50IHRvIGJ1eSBhIGJvb2ssIHNwZWFrIHRvIHRoaXMgcGVyc29uLicsb3B0czonQUJDREVGRycsYW5zOidBJ30sCiAge246NCx0ZXh0OidUaGlzIHBsYWNlIGlzIG9wZW4gaW4gdGhlIGV2ZW5pbmdzLicsb3B0czonQUJDREVGRycsYW5zOidCJ30sCiAge246NSx0ZXh0OidZb3UgY2Fubm90IGVudGVyIGhlcmUgYXQgdGhlIG1vbWVudC4nLG9wdHM6J0FCQ0RFRkcnLGFuczonRCd9LApdOwp2YXIgUDIgPSBbCiAge246Nix0ZXh0OidTaGUgX19fX18gaGVyIGZyaWVuZCBTYXJhaCBpZiBzaGUgd291bGQgbGlrZSB0byBnbyB0b28uJyxvcHRzOltbJ0EnLCdzYWlkJ10sWydCJywndG9sZCddLFsnQycsJ2Fza2VkJ11dLGFuczonQyd9LAogIHtuOjcsdGV4dDonSGVsZW4gY2FsbGVkIHRoZSB0aGVhdHJlIGFuZCBfX19fXyB0d28gdGlja2V0cy4nLG9wdHM6W1snQScsJ3BhaWQnXSxbJ0InLCdib29rZWQnXSxbJ0MnLCdvZmZlcmVkJ11dLGFuczonQid9LAogIHtuOjgsdGV4dDonU2hlIGNob3NlIHNvbWUgX19fX18gbmVhciB0aGUgc3RhZ2UuJyxvcHRzOltbJ0EnLCdzZWF0cyddLFsnQicsJ2NoYWlycyddLFsnQycsJ3NvZmFzJ11dLGFuczonQSd9LAogIHtuOjksdGV4dDonQXQgdGhlIHRoZWF0cmUgSGVsZW4gYW5kIFNhcmFoIHdlbnQgdG8gdGhlIGNhZlx1MDBFOSBmb3IgYSBkcmluayBhbmQgYSBfX19fXyBvZiBjYWtlLicsb3B0czpbWydBJywnY3VwJ10sWydCJywncGFydCddLFsnQycsJ3NsaWNlJ11dLGFuczonQyd9LAogIHtuOjEwLHRleHQ6J1RoZXkgaGFkIGEgZ29vZCBfX19fXyBvZiB0aGUgc3RhZ2UgZnJvbSB3aGVyZSB0aGV5IHNhdC4nLG9wdHM6W1snQScsJ3ZpZXcnXSxbJ0InLCd3YXknXSxbJ0MnLCdwbGFjZSddXSxhbnM6J0EnfSwKXTsKdmFyIFAzYSA9IFsKICB7bjoxMSx0ZXh0OiJEb24ndCBmb3JnZXQgdG8gYnV5IHNvbWUgZnJlc2ggYnJlYWQgb24geW91ciB3YXkgaG9tZS4iLG9wdHM6W1snQScsJ05vdCBhdCBhbGwuJ10sWydCJywnSSBob3BlIHNvLiddLFsiQyIsIkknbGwgdHJ5IG5vdCB0by4iXV0sYW5zOidDJ30sCiAge246MTIsdGV4dDonQ2FuIHlvdSBoZWxwIG1lIHdpdGggbXkgaG9tZXdvcms\/JyxvcHRzOltbJ0EnLCdIb3cgZG8geW91IGtub3cgYWJvdXQgdGhhdD8nXSxbJ0InLCdIb3cgbG9uZyBpcyBpdCBnb2luZyB0byB0YWtlPyddLFsnQycsJ0hvdyBvZnRlbiBkbyB5b3UgZ28gdGhlcmU\/J11dLGFuczonQid9LAogIHtuOjEzLHRleHQ6J1JlbWVtYmVyIHRvIHRha2UgeW91ciBrZXlzIHdpdGggeW91Licsb3B0czpbWyJBIiwiSSd2ZSBnb3QgdGhlbSBhbHJlYWR5LiJdLFsiQiIsIkkgaGF2ZW4ndCBiZWVuIHRoZXJlIHlldC4iXSxbIkMiLCJUaGV5J3JlIGdvaW5nIG91dCBub3cuIl1dLGFuczonQSd9LAogIHtuOjE0LHRleHQ6J1dlIGhhdmUgdG8gdHVybiBsZWZ0IGF0IHRoZSBuZXh0IHRyYWZmaWMgbGlnaHRzLicsb3B0czpbWydBJywnTm90IHZlcnkgb2Z0ZW4uJ10sWyJCIiwiSSBkb24ndCBhZ3JlZS4iXSxbIkMiLCJJdCdzIG5vdCBtdWNoLiJdXSxhbnM6J0InfSwKICB7bjoxNSx0ZXh0OiJXaG8ncyBvdXIgbWF0aHMgdGVhY2hlciB0aGlzIHllYXI\/IixvcHRzOltbIkEiLCJJIGRvbid0IHRoaW5rIHNvLiJdLFsiQiIsIk5vLW9uZSdzIHRvbGQgdXMgeWV0LiJdLFsiQyIsIkhlIGRvZXNuJ3QgbGlrZSBpdC4iXV0sYW5zOidCJ30sCl07CnZhciBQM2JBbnMgPSB7MTY6J0YnLDE3OidDJywxODonRycsMTk6J0InLDIwOidBJ307CnZhciBQNCA9IFsKICB7bjoyMSx0ZXh0OidUaGVyZSBhcmUgbG90cyBvZiBwbGFjZXMgZm9yIERhdmlkIHRvIGRvIGhpcyBzcG9ydCBpbiBoaXMgYXJlYS4nLG9wdHM6W1snQScsJ1JpZ2h0J10sWydCJywnV3JvbmcnXSxbJ0MnLCJEb2Vzbid0IHNheSJdXSxhbnM6J0EnfSwKICB7bjoyMix0ZXh0OidNYXJ0aW4gc2F5cyB0aGF0IERhdmlkIGlzIG5lYXJseSBhcyBnb29kIGF0IHJvd2luZyBhcyBoaW0uJyxvcHRzOltbJ0EnLCdSaWdodCddLFsnQicsJ1dyb25nJ10sWydDJywiRG9lc24ndCBzYXkiXV0sYW5zOidCJ30sCiAge246MjMsdGV4dDonV2VuZHkgaGVscHMgTWFydGluIGFuZCBEYXZpZCBieSBkb2luZyB0aGUgZHJpdmluZy4nLG9wdHM6W1snQScsJ1JpZ2h0J10sWydCJywnV3JvbmcnXSxbJ0MnLCJEb2Vzbid0IHNheSJdXSxhbnM6J0EnfSwKICB7bjoyNCx0ZXh0OidUaGUgUmF3c29ucyBwYWlkIHRoZSBzYW1lIHByaWNlIGZvciBhbGwgdGhlaXIgYm9hdHMuJyxvcHRzOltbJ0EnLCdSaWdodCddLFsnQicsJ1dyb25nJ10sWydDJywiRG9lc24ndCBzYXkiXV0sYW5zOidCJ30sCiAge246MjUsdGV4dDonV2VuZHkgaXMgdW5oYXBweSBhYm91dCBob3cgbWFueSBib2F0cyB0aGVyZSBhcmUgaW4gdGhlIGdhcmFnZS4nLG9wdHM6W1snQScsJ1JpZ2h0J10sWydCJywnV3JvbmcnXSxbJ0MnLCJEb2Vzbid0IHNheSJdXSxhbnM6J0MnfSwKICB7bjoyNix0ZXh0OidEYXZpZCBmb3VuZCBhIHRlYWNoZXIgdG8gaGVscCBoaW0gbGVhcm4gdG8gcm93IG9uIHRoZSBzZWEuJyxvcHRzOltbJ0EnLCdSaWdodCddLFsnQicsJ1dyb25nJ10sWydDJywiRG9lc24ndCBzYXkiXV0sYW5zOidDJ30sCiAge246MjcsdGV4dDonSXQgaXMgcG9zc2libGUgZm9yIERhdmlkIHRvIHJvdyBvbiBoaXMgZmF2b3VyaXRlIHJpdmVycyBhbGwgeWVhci4nLG9wdHM6W1snQScsJ1JpZ2h0J10sWydCJywnV3JvbmcnXSxbJ0MnLCJEb2Vzbid0IHNheSJdXSxhbnM6J0InfSwKXTsKdmFyIFA1ID0gWwogIHtuOjI4LG9wdHM6W1snQScsJ2xhcmdlJ10sWydCJywnbGFyZ2VyJ10sWydDJywnbGFyZ2VzdCddXSxhbnM6J0MnfSwKICB7bjoyOSxvcHRzOltbJ0EnLCd0aGVpcnMnXSxbJ0InLCd0aGVpciddLFsnQycsJ2l0cyddXSxhbnM6J0InfSwKICB7bjozMCxvcHRzOltbJ0EnLCdzaW5jZSddLFsnQicsJ2Zyb20nXSxbJ0MnLCdkdXJpbmcnXV0sYW5zOidDJ30sCiAge246MzEsb3B0czpbWydBJywndG9vJ10sWydCJywnZW5vdWdoJ10sWydDJywnZXZlbiddXSxhbnM6J0EnfSwKICB7bjozMixvcHRzOltbJ0EnLCdjYXVnaHQnXSxbJ0InLCdjYXRjaCddLFsnQycsJ2NhdGNoaW5nJ11dLGFuczonQid9LAogIHtuOjMzLG9wdHM6W1snQScsJ2hhcyddLFsnQicsJ2NhbiddLFsnQycsJ3Nob3VsZCddXSxhbnM6J0EnfSwKICB7bjozNCxvcHRzOltbJ0EnLCdieSddLFsnQicsJ3VudGlsJ10sWydDJywndG8nXV0sYW5zOidCJ30sCiAge246MzUsb3B0czpbWydBJywnd2hpY2gnXSxbJ0InLCd3aGF0J10sWydDJywnd2hlcmUnXV0sYW5zOidBJ30sCl07CnZhciBQNiA9IFsKICB7bjozNix0ZXh0OidZb3UgYXJlIG9mdGVuIGdpdmVuIGxvdHMgb2YgdGhlc2Ugb24geW91ciBiaXJ0aGRheS4nLGZpcnN0OidwJyxhbnM6J3ByZXNlbnRzJ30sCiAge246MzcsdGV4dDonQSBnaXJsIG1heSB3ZWFyIHRoaXMgdG8gYSBwYXJ0eS4nLGZpcnN0OidkJyxhbnM6J2RyZXNzJ30sCiAge246MzgsdGV4dDonVGhpcyBpcyBtYWRlIGZyb20gZnJ1aXQgYW5kIGlzIG9mdGVuIHNlcnZlZCBhdCBwYXJ0aWVzLicsZmlyc3Q6J2onLGFuczonanVpY2UnfSwKICB7bjozOSx0ZXh0OiJBdCBhIGNoaWxkcmVuJ3MgcGFydHksIHBlb3BsZSBvZnRlbiBwbGF5IHRoZXNlLiIsZmlyc3Q6J2cnLGFuczonZ2FtZXMnfSwKICB7bjo0MCx0ZXh0OidZb3Ugd3JpdGUgYSBtZXNzYWdlIGluIHRoaXMgYW5kIGdpdmUgaXQgdG8gc29tZW9uZSBvbiB0aGVpciBiaXJ0aGRheS4nLGZpcnN0OidjJyxhbnM6J2NhcmQnfSwKXTsKdmFyIFA3QW5zID0gewogIDQxOlsnbWUnXSwKICA0MjpbJ2EnXSwKICA0MzpbJ3RoYW4nXSwKICA0NDpbJ25vJ10sCiAgNDU6WydtdWNoJ10sCiAgNDY6WydkbyddLAogIDQ3OlsndG8nXSwKICA0ODpbJ29yJ10sCiAgNDk6WydvZiddLAogIDUwOlsnaXQnXSwKfTsKdmFyIFA4QW5zID0gewogIDUxOlsnYmV0dGVyIHBob3RvcyddLAogIDUyOlsnMTIuNTAnLCdcdTAwQTMxMi41MCcsJ3R3ZWx2ZSBwb3VuZHMgZmlmdHknLCcxMi41MCBwb3VuZHMnLCdcdTAwQTMxMi41MHAnXSwKICA1MzpbJ2RhdmlkIGZveCcsJ2ZveCddLAogIDU0OlsnNzg2ODYxJywnNzg2IDg2MSddLAogIDU1OlsnMTAnLCcxMHRoJywndGVudGgnLCcxMCBqdW5lJywnMTB0aCBqdW5lJywnanVuZSAxMCcsJzEwKHRoKSBqdW5lJ10sCn07CgovLyA9PT09PSBSZW5kZXJpbmcgPT09PT0KZnVuY3Rpb24gcmVuZGVyTUNRKGxpc3RFbCwgZGF0YSl7CiAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHEpewogICAgdmFyIGRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIGRpdi5jbGFzc05hbWU9J3EtaXRlbSc7IGRpdi5kYXRhc2V0LnFpZD1xLm47CiAgICB2YXIgb3B0c0hUTUw9Jyc7CiAgICBpZihBcnJheS5pc0FycmF5KHEub3B0cykpewogICAgICBxLm9wdHMuZm9yRWFjaChmdW5jdGlvbihvKXsKICAgICAgICBvcHRzSFRNTCArPSAnPGxhYmVsIGNsYXNzPSJvcHQiIGRhdGEtbGV0dGVyPSInK29bMF0rJyI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJxJytxLm4rJyIgdmFsdWU9Iicrb1swXSsnIj48c3BhbiBjbGFzcz0ib3B0LWxldHRlciI+JytvWzBdKyc8L3NwYW4+ICcrZXNjYXBlSHRtbChvWzFdKSsnPC9sYWJlbD4nOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIHN0cmluZyBvZiBsZXR0ZXJzIChQMSkKICAgICAgZm9yKHZhciBpPTA7aTxxLm9wdHMubGVuZ3RoO2krKyl7CiAgICAgICAgdmFyIEw9cS5vcHRzW2ldOwogICAgICAgIG9wdHNIVE1MICs9ICc8bGFiZWwgY2xhc3M9Im9wdCIgZGF0YS1sZXR0ZXI9IicrTCsnIj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InEnK3EubisnIiB2YWx1ZT0iJytMKyciPjxzcGFuIGNsYXNzPSJvcHQtbGV0dGVyIj4nK0wrJzwvc3Bhbj48L2xhYmVsPic7CiAgICAgIH0KICAgIH0KICAgIGRpdi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0icS10ZXh0Ij48YiBjbGFzcz0icW4iPicrcS5uKycuPC9iPjxzcGFuPicrZXNjYXBlSHRtbChxLnRleHQpKyc8L3NwYW4+PC9kaXY+JysKICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0icS1vcHRzIj4nK29wdHNIVE1MKyc8L2Rpdj4nKwogICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJmZWVkYmFjayI+PC9kaXY+JzsKICAgIGxpc3RFbC5hcHBlbmRDaGlsZChkaXYpOwogIH0pOwp9CmZ1bmN0aW9uIGVzY2FwZUh0bWwocyl7cmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9bJjw+IiddL2csZnVuY3Rpb24oYyl7cmV0dXJuIHsnJic6JyZhbXA7JywnPCc6JyZsdDsnLCc+JzonJmd0OycsJyInOicmcXVvdDsnLCInIjonJiMzOTsnfVtjXX0pfQoKcmVuZGVyTUNRKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXJ0MUxpc3QnKSxQMSk7CnJlbmRlck1DUShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFydDJMaXN0JyksUDIpOwpyZW5kZXJNQ1EoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcnQzYUxpc3QnKSxQM2EpOwpyZW5kZXJNQ1EoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcnQ0TGlzdCcpLFA0KTsKCi8vIFBhcnQgNSBcdTIwMTQgcmVuZGVyIGFzIE1DUSBsaXN0IHVuZGVyIHRoZSBwYXNzYWdlCnJlbmRlck1DUShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFydDVMaXN0JyksUDUubWFwKGZ1bmN0aW9uKHEpe3JldHVybiB7bjpxLm4sdGV4dDonUXVlc3Rpb24gJytxLm4rJyBcdTIwMTQgY2hvb3NlIHRoZSBiZXN0IHdvcmQgZm9yIHRoZSBnYXAuJyxvcHRzOnEub3B0cyxhbnM6cS5hbnN9fSkpOwoKLy8gUGFydCA2IFx1MjAxNCBmaXJzdC1sZXR0ZXIgKyBkYXNoZXMgKyBpbnB1dAooZnVuY3Rpb24oKXsKICB2YXIgbGlzdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFydDZMaXN0Jyk7CiAgUDYuZm9yRWFjaChmdW5jdGlvbihxKXsKICAgIHZhciBkYXNoQ291bnQgPSBxLmFucy5sZW5ndGggLSAxOwogICAgdmFyIGRhc2hlcyA9IG5ldyBBcnJheShkYXNoQ291bnQpLmZpbGwoJ18nKS5qb2luKCcgJyk7CiAgICB2YXIgZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBkaXYuY2xhc3NOYW1lPSdxLWl0ZW0nOyBkaXYuZGF0YXNldC5xaWQ9cS5uOwogICAgZGl2LmlubmVySFRNTD0nPGRpdiBjbGFzcz0icS10ZXh0Ij48YiBjbGFzcz0icW4iPicrcS5uKycuPC9iPjxzcGFuPicrZXNjYXBlSHRtbChxLnRleHQpKyc8L3NwYW4+PC9kaXY+JysKICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9IndvcmQtcm93Ij48c3BhbiBjbGFzcz0iZmlyc3QtbGV0dGVyIj4nK3EuZmlyc3QrJzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LWJsYW5rIiBkYXRhLXE9IicrcS5uKyciIHBsYWNlaG9sZGVyPSInK2Rhc2hlcysnIiBzdHlsZT0ibWluLXdpZHRoOjIwMHB4Ij48L2Rpdj4nKwogICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iZmVlZGJhY2siPjwvZGl2Pic7CiAgICBsaXN0LmFwcGVuZENoaWxkKGRpdik7CiAgfSk7Cn0pKCk7CgovLyA9PT09PSBXaXJlIG9wdGlvbiBjbGlja3MgPT09PT0KZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm9wdCcpLmZvckVhY2goZnVuY3Rpb24ob3B0KXsKICBvcHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpewogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgdmFyIGlucHV0PW9wdC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpOwogICAgdmFyIGdyb3VwPW9wdC5wYXJlbnRFbGVtZW50OwogICAgZ3JvdXAucXVlcnlTZWxlY3RvckFsbCgnLm9wdCcpLmZvckVhY2goZnVuY3Rpb24obyl7by5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpfSk7CiAgICBvcHQuY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTsKICAgIGlucHV0LmNoZWNrZWQ9dHJ1ZTsKICAgIHVwZGF0ZVByb2dyZXNzKCk7CiAgfSk7Cn0pOwoKLy8gaW5wdXRzCmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pbnB1dC1ibGFuaywucS1zZWxlY3QnKS5mb3JFYWNoKGZ1bmN0aW9uKGVsKXsKICBlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsdXBkYXRlUHJvZ3Jlc3MpOwogIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsdXBkYXRlUHJvZ3Jlc3MpOwp9KTsKCi8vID09PT09IFN1Ym1pdCAmIEdyYWRlID09PT09CmZ1bmN0aW9uIGdldE1jcUFucyhxaWQpewogIHZhciBzZWw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT0icScrcWlkKyciXTpjaGVja2VkJyk7CiAgcmV0dXJuIHNlbD9zZWwudmFsdWU6bnVsbDsKfQpmdW5jdGlvbiBnZXRJbnB1dEFucyhxaWQpewogIHZhciBlbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaW5wdXQtYmxhbmtbZGF0YS1xPSInK3FpZCsnIl0nKTsKICByZXR1cm4gZWw\/ZWwudmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk6Jyc7Cn0KZnVuY3Rpb24gZ2V0U2VsZWN0QW5zKHFpZCl7CiAgdmFyIGVsPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5xLXNlbGVjdFtkYXRhLXFpZD0iJytxaWQrJyJdJyk7CiAgcmV0dXJuIGVsP2VsLnZhbHVlOicnOwp9CmZ1bmN0aW9uIHRvdGFsUXMoKXtyZXR1cm4gNTV9CgpmdW5jdGlvbiBhbnN3ZXJlZENvdW50KCl7CiAgdmFyIG49MDsKICAvLyBNQ1E6IFAxKDEtNSkgUDIoNi0xMCkgUDNhKDExLTE1KSBQNCgyMS0yNykgUDUoMjgtMzUpCiAgWzEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1XS5mb3JFYWNoKGZ1bmN0aW9uKHEpe2lmKGdldE1jcUFucyhxKSluKyt9KTsKICBbMTYsMTcsMTgsMTksMjBdLmZvckVhY2goZnVuY3Rpb24ocSl7aWYoZ2V0U2VsZWN0QW5zKHEpKW4rK30pOwogIC8vIGlucHV0cwogIGZvcih2YXIgaT0zNjtpPD01NTtpKyspe2lmKGdldElucHV0QW5zKGkpKW4rK30KICByZXR1cm4gbjsKfQpmdW5jdGlvbiB1cGRhdGVQcm9ncmVzcygpewogIHZhciBhPWFuc3dlcmVkQ291bnQoKSwgdG90YWw9dG90YWxRcygpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbnN3ZXJlZENvdW50JykudGV4dENvbnRlbnQ9YTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvZ0ZpbGwnKS5zdHlsZS53aWR0aD0oYS90b3RhbCoxMDApKyclJzsKfQoKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1Ym1pdEJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpewogIHZhciBzY29yZT0wOwogIC8vIE1DUSBwYXJ0cwogIHZhciBtY3FQYXJ0cz1bUDEsUDIsUDNhLFA0LFA1XTsKICBtY3FQYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKHBhcnQpewogICAgcGFydC5mb3JFYWNoKGZ1bmN0aW9uKHEpewogICAgICB2YXIgdj1nZXRNY3FBbnMocS5uKSwgaXRlbT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucS1pdGVtW2RhdGEtcWlkPSInK3EubisnIl0nKTsKICAgICAgaWYoIWl0ZW0pcmV0dXJuOwogICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ2Fuc3dlcmVkJyk7CiAgICAgIC8vIG1hcmsgY29ycmVjdC9pbmNvcnJlY3Qgb3B0cwogICAgICBpdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJy5vcHQnKS5mb3JFYWNoKGZ1bmN0aW9uKG8pewogICAgICAgIHZhciBMPW8uZGF0YXNldC5sZXR0ZXI7CiAgICAgICAgaWYoTD09PXEuYW5zKXtvLmNsYXNzTGlzdC5hZGQoJ2NvcnJlY3Qtb3B0Jyl9CiAgICAgICAgaWYodj09PUwpaWYoTCE9PXEuYW5zKXtvLmNsYXNzTGlzdC5hZGQoJ3dyb25nLW9wdCcpfQogICAgICB9KTsKICAgICAgdmFyIGZiPWl0ZW0ucXVlcnlTZWxlY3RvcignLmZlZWRiYWNrJyk7CiAgICAgIGlmKHY9PT1xLmFucyl7c2NvcmUrKzsgaXRlbS5jbGFzc0xpc3QuYWRkKCdjb3JyZWN0Jyk7IGZiLnRleHRDb250ZW50PSdcdTI3MTQgQ29ycmVjdCBcdTIwMTQgJytxLmFuc30KICAgICAgZWxzZXtpdGVtLmNsYXNzTGlzdC5hZGQoJ3dyb25nJyk7IGZiLnRleHRDb250ZW50PSdcdTI3MTggV3JvbmcgXHUyMDE0IGNvcnJlY3QgYW5zd2VyOiAnK3EuYW5zICsgKHY\/KCcgKHlvdSBjaG9zZSAnK3YrJyknKTonIChubyBhbnN3ZXIpJyl9CiAgICB9KTsKICB9KTsKICAvLyBQYXJ0IDNiIHNlbGVjdHMKICB2YXIgcDNiRmI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcnQzYkZlZWRiYWNrJyk7CiAgcDNiRmIuaW5uZXJIVE1MPScnOwogIE9iamVjdC5rZXlzKFAzYkFucykuZm9yRWFjaChmdW5jdGlvbihxaWQpewogICAgdmFyIHY9Z2V0U2VsZWN0QW5zKHFpZCksIGNvcnJlY3Q9UDNiQW5zW3FpZF07CiAgICB2YXIgZWw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnEtc2VsZWN0W2RhdGEtcWlkPSInK3FpZCsnIl0nKTsKICAgIGlmKGVsKXtlbC5zdHlsZS5ib3JkZXJDb2xvcj0odj09PWNvcnJlY3Q\/JyMxMEI5ODEnOicjRUY0NDQ0Jyk7IGVsLnN0eWxlLmJvcmRlcldpZHRoPScycHgnOyBlbC5zdHlsZS5ib3JkZXJTdHlsZT0nc29saWQnfQogICAgdmFyIG5vdGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBub3RlLnN0eWxlLmNzc1RleHQ9J3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyLXJhZGl1czo4cHg7bWFyZ2luLXRvcDo2cHg7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MDA7Jysodj09PWNvcnJlY3Q\/J2JhY2tncm91bmQ6cmdiYSgxNiwxODUsMTI5LC4xMik7Y29sb3I6IzA2NUY0Nic6J2JhY2tncm91bmQ6cmdiYSgyMzksNjgsNjgsLjEwKTtjb2xvcjojOTkxQjFCJyk7CiAgICBub3RlLmlubmVySFRNTD0nPGI+UScrcWlkKyc8L2I+OiAnKyh2PT09Y29ycmVjdD8nXHUyNzE0IENvcnJlY3QgKCcrY29ycmVjdCsnKSc6J1x1MjcxOCBXcm9uZyBcdTIwMTQgY29ycmVjdDogJytjb3JyZWN0Kyh2PycsIHlvdSBjaG9zZSAnK3Y6Jywgbm8gYW5zd2VyJykpOwogICAgcDNiRmIuYXBwZW5kQ2hpbGQobm90ZSk7CiAgICBpZih2PT09Y29ycmVjdClzY29yZSsrOwogIH0pOwogIC8vIFBhcnQgNgogIFA2LmZvckVhY2goZnVuY3Rpb24ocSl7CiAgICB2YXIgdj1nZXRJbnB1dEFucyhxLm4pLCBlbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaW5wdXQtYmxhbmtbZGF0YS1xPSInK3EubisnIl0nKSwgaXRlbT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucS1pdGVtW2RhdGEtcWlkPSInK3EubisnIl0nKTsKICAgIGlmKCFlbHx8IWl0ZW0pcmV0dXJuOwogICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdhbnN3ZXJlZCcpOwogICAgdmFyIG9rPSh2PT09cS5hbnMudG9Mb3dlckNhc2UoKSk7CiAgICBpZihvayl7c2NvcmUrKzsgZWwuY2xhc3NMaXN0LmFkZCgnY29ycmVjdCcpOyBpdGVtLmNsYXNzTGlzdC5hZGQoJ2NvcnJlY3QnKTsgaXRlbS5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2snKS50ZXh0Q29udGVudD0nXHUyNzE0IENvcnJlY3QnfQogICAgZWxzZXtlbC5jbGFzc0xpc3QuYWRkKCd3cm9uZycpOyBpdGVtLmNsYXNzTGlzdC5hZGQoJ3dyb25nJyk7IGl0ZW0ucXVlcnlTZWxlY3RvcignLmZlZWRiYWNrJykudGV4dENvbnRlbnQ9J1x1MjcxOCBXcm9uZyBcdTIwMTQgY29ycmVjdDogJytxLmFuc30KICB9KTsKICAvLyBQYXJ0IDcKICBPYmplY3Qua2V5cyhQN0FucykuZm9yRWFjaChmdW5jdGlvbihxaWQpewogICAgdmFyIHY9Z2V0SW5wdXRBbnMocWlkKSwgZWw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmlucHV0LWJsYW5rW2RhdGEtcT0iJytxaWQrJyJdJyksIGFjY2VwdGVkPVA3QW5zW3FpZF07CiAgICBpZighZWwpcmV0dXJuOwogICAgdmFyIG9rPWFjY2VwdGVkLmluZGV4T2Yodik+PTA7CiAgICBpZihvayl7c2NvcmUrKzsgZWwuY2xhc3NMaXN0LmFkZCgnY29ycmVjdCcpfSBlbHNlIHtlbC5jbGFzc0xpc3QuYWRkKCd3cm9uZycpOyBlbC50aXRsZT0nQ29ycmVjdDogJythY2NlcHRlZC5qb2luKCcgLyAnKX0KICB9KTsKICAvLyBQYXJ0IDgKICBPYmplY3Qua2V5cyhQOEFucykuZm9yRWFjaChmdW5jdGlvbihxaWQpewogICAgdmFyIHY9Z2V0SW5wdXRBbnMocWlkKSwgZWw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmlucHV0LWJsYW5rW2RhdGEtcT0iJytxaWQrJyJdJyksIGFjY2VwdGVkPVA4QW5zW3FpZF07CiAgICBpZighZWwpcmV0dXJuOwogICAgdmFyIG9rPWFjY2VwdGVkLmluZGV4T2Yodik+PTA7CiAgICBpZihvayl7c2NvcmUrKzsgZWwuY2xhc3NMaXN0LmFkZCgnY29ycmVjdCcpfSBlbHNlIHtlbC5jbGFzc0xpc3QuYWRkKCd3cm9uZycpOyBlbC50aXRsZT0nQ29ycmVjdDogJythY2NlcHRlZC5qb2luKCcgLyAnKX0KICB9KTsKCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Njb3JlTm93JykudGV4dENvbnRlbnQ9c2NvcmU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbmFsU2NvcmUnKS50ZXh0Q29udGVudD1zY29yZTsKICB2YXIgcGN0PU1hdGgucm91bmQoc2NvcmUvNTUqMTAwKTsKICB2YXIgbXNnPScnOwogIGlmKHBjdD49ODUpIG1zZz0nXHV7MUYzQzZ9IEV4Y2VsbGVudCEgWW91IGFyZSB3ZWxsIHByZXBhcmVkIGZvciB0aGUgcmVhbCBLRVQgZXhhbS4nOwogIGVsc2UgaWYocGN0Pj03MCkgbXNnPSdcdXsxRjQ0RH0gR29vZCBqb2IhIEEgZmV3IG1vcmUgdGVzdHMgYW5kIHlvdSB3aWxsIGJlIHJlYWR5Lic7CiAgZWxzZSBpZihwY3Q+PTUwKSBtc2c9J1x1ezFGNERBfSBLZWVwIHByYWN0aXNpbmcgXHUyMDE0IHJldmlldyB0aGUgd3JvbmcgYW5zd2VycyBhYm92ZS4nOwogIGVsc2UgbXNnPSdcdXsxRjRBQX0gU3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBSZXJlYWQgdGhlIHBhc3NhZ2VzIGFuZCB0cnkgYWdhaW4uJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0c01zZycpLnRleHRDb250ZW50PW1zZzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0c0Jhbm5lcicpLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTsKICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdHNCYW5uZXInKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCcsYmxvY2s6J2NlbnRlcid9KX0sMTIwKTsKfSk7Cgpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzZXRCdG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXsKICBpZighY29uZmlybSgnUmVzZXQgYWxsIGFuc3dlcnM\/JykpcmV0dXJuOwogIGxvY2F0aW9uLnJlbG9hZCgpOwp9KTsKCi8vIFdyaXRpbmcgd29yZCBjb3VudGVyCnZhciB0YT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd3JpdGluZ0FyZWEnKSx3Yz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2NDb3VudGVyJyk7CnRhLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JyxmdW5jdGlvbigpewogIHZhciB3PXRhLnZhbHVlLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDsKICB3Yy50ZXh0Q29udGVudD13Kycgd29yZHMgXHUwMEI3IHRhcmdldCAyNVx1MjAxMzM1JzsKICB3Yy5jbGFzc0xpc3QucmVtb3ZlKCdvaycsJ292ZXInKTsKICBpZih3Pj0yNSlpZih3PD0zNSl3Yy5jbGFzc0xpc3QuYWRkKCdvaycpOwogIGVsc2UgaWYodz4zNSl3Yy5jbGFzc0xpc3QuYWRkKCdvdmVyJyk7Cn0pOwpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FtcGxlVG9nZ2xlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbXBsZUJveCcpLmNsYXNzTGlzdC50b2dnbGUoJ3Nob3cnKTsKfSk7CgovLyA9PT09PSBTSE9XIEFOU1dFUiBQRVItUSBGRUFUVVJFID09PT09CmZ1bmN0aW9uIGdldEFuc0ZvclEobil7CiAgaWYobj49MSkgaWYobjw9NSkgcmV0dXJuIChQMS5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiB4Lm49PT1ufSl8fHt9KS5hbnM7CiAgaWYobj49NikgaWYobjw9MTApIHJldHVybiAoUDIuZmluZChmdW5jdGlvbih4KXtyZXR1cm4geC5uPT09bn0pfHx7fSkuYW5zOwogIGlmKG4+PTExKSBpZihuPD0xNSkgcmV0dXJuIChQM2EuZmluZChmdW5jdGlvbih4KXtyZXR1cm4geC5uPT09bn0pfHx7fSkuYW5zOwogIGlmKG4+PTIxKSBpZihuPD0yNykgcmV0dXJuIChQNC5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiB4Lm49PT1ufSl8fHt9KS5hbnM7CiAgaWYobj49MjgpIGlmKG48PTM1KSByZXR1cm4gKFA1LmZpbmQoZnVuY3Rpb24oeCl7cmV0dXJuIHgubj09PW59KXx8e30pLmFuczsKICByZXR1cm4gbnVsbDsKfQovLyBNQ1EgcS1pdGVtczogYXBwZW5kIFNob3cgQW5zd2VyIGJ1dHRvbgpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbihpdGVtKXsKICBpZihpdGVtLnF1ZXJ5U2VsZWN0b3IoJy5zaG93LWFucy1idG4nKSkgcmV0dXJuOwogIHZhciBxaWQ9cGFyc2VJbnQoaXRlbS5kYXRhc2V0LnFpZCk7CiAgdmFyIGJ0bj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICBidG4uY2xhc3NOYW1lPSdzaG93LWFucy1idG4nOyBidG4udHlwZT0nYnV0dG9uJzsKICBidG4uaW5uZXJIVE1MPSdcdXsxRjQ0MX0gU2hvdyBBbnN3ZXInOwogIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXsKICAgIHZhciBpc1A2PWZhbHNlOyBpZihxaWQ+PTM2KSBpZihxaWQ8PTQwKSBpc1A2PXRydWU7CiAgICBpZihpc1A2KXsKICAgICAgLy8gUGFydCA2IHNwZWxsIGlucHV0CiAgICAgIHZhciBwNnE9UDYuZmluZChmdW5jdGlvbih4KXtyZXR1cm4geC5uPT09cWlkfSk7CiAgICAgIHZhciBpbnB1dD1pdGVtLnF1ZXJ5U2VsZWN0b3IoJy5pbnB1dC1ibGFuaycpOwogICAgICBpZihpbnB1dCkgaWYocDZxKXtpbnB1dC52YWx1ZT1wNnEuYW5zOyBpbnB1dC5jbGFzc0xpc3QuYWRkKCdjb3JyZWN0Jyk7IGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcpKTt9CiAgICAgIHZhciBmYjY9aXRlbS5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2snKTsKICAgICAgaWYoZmI2KSBpZihwNnEpe2l0ZW0uY2xhc3NMaXN0LmFkZCgnYW5zd2VyZWQnKTsgaXRlbS5jbGFzc0xpc3QuYWRkKCdjb3JyZWN0Jyk7IGZiNi50ZXh0Q29udGVudD0nXHV7MUY0NDF9IEFuc3dlcjogJytwNnEuYW5zO30KICAgIH0gZWxzZSB7CiAgICAgIHZhciBhbnM9Z2V0QW5zRm9yUShxaWQpOwogICAgICBpZighYW5zKSByZXR1cm47CiAgICAgIC8vIGhpZ2hsaWdodCBjb3JyZWN0IG9wdGlvbgogICAgICB2YXIgY29ycmVjdE9wdD1pdGVtLnF1ZXJ5U2VsZWN0b3IoJy5vcHRbZGF0YS1sZXR0ZXI9IicrYW5zKyciXScpOwogICAgICBpZihjb3JyZWN0T3B0KXtjb3JyZWN0T3B0LmNsYXNzTGlzdC5hZGQoJ2NvcnJlY3Qtb3B0Jyk7fQogICAgICAvLyBzaW11bGF0ZSBjbGljayBzbyB1cGRhdGVQcm9ncmVzcyBmaXJlcwogICAgICB2YXIgZmI9aXRlbS5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2snKTsKICAgICAgaWYoZmIpe2l0ZW0uY2xhc3NMaXN0LmFkZCgnYW5zd2VyZWQnKTsgZmIuc3R5bGUuYmFja2dyb3VuZD0ncmdiYSgxNiwxODUsMTI5LC4xMiknOyBmYi5zdHlsZS5jb2xvcj0nIzA2NUY0Nic7IGZiLnRleHRDb250ZW50PSdcdXsxRjQ0MX0gQW5zd2VyOiAnK2Fuczt9CiAgICB9CiAgICBidG4uZGlzYWJsZWQ9dHJ1ZTsKICB9KTsKICBpdGVtLmFwcGVuZENoaWxkKGJ0bik7Cn0pOwovLyBQYXJ0IDNiIHNlbGVjdHM6IGFwcGVuZCBpbmxpbmUgU2hvdyBBbnN3ZXIgYnV0dG9uClsxNiwxNywxOCwxOSwyMF0uZm9yRWFjaChmdW5jdGlvbihxaWQpewogIHZhciBzZWw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnEtc2VsZWN0W2RhdGEtcWlkPSInK3FpZCsnIl0nKTsKICBpZighc2VsKSByZXR1cm47CiAgdmFyIGJ0bj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICBidG4uY2xhc3NOYW1lPSdzaG93LWFucy1idG4taW5saW5lJzsgYnRuLnR5cGU9J2J1dHRvbic7CiAgdmFyIGFucz1QM2JBbnNbcWlkXTsKICBidG4uaW5uZXJIVE1MPSdcdXsxRjQ0MX0gJythbnM7CiAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpewogICAgc2VsLnZhbHVlPWFuczsgc2VsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnKSk7CiAgICBzZWwuc3R5bGUuYm9yZGVyQ29sb3I9JyMxMEI5ODEnOyBzZWwuc3R5bGUuYm9yZGVyV2lkdGg9JzJweCc7IHNlbC5zdHlsZS5ib3JkZXJTdHlsZT0nc29saWQnOwogICAgYnRuLmRpc2FibGVkPXRydWU7CiAgfSk7CiAgc2VsLmluc2VydEFkamFjZW50RWxlbWVudCgnYWZ0ZXJlbmQnLCBidG4pOwp9KTsKLy8gUGFydCA3ICYgOCBpbnB1dHM6IGFwcGVuZCBpbmxpbmUgU2hvdyBBbnN3ZXIgYnV0dG9uCmZvcih2YXIgcWk9NDE7cWk8PTU1O3FpKyspewogIChmdW5jdGlvbihxaWQpewogICAgdmFyIGlucD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaW5wdXQtYmxhbmtbZGF0YS1xPSInK3FpZCsnIl0nKTsKICAgIGlmKCFpbnApIHJldHVybjsKICAgIHZhciBhbnM9KHFpZDw9NTApP1A3QW5zW3FpZF1bMF06UDhBbnNbcWlkXVswXTsKICAgIHZhciBidG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICBidG4uY2xhc3NOYW1lPSdzaG93LWFucy1idG4taW5saW5lJzsgYnRuLnR5cGU9J2J1dHRvbic7CiAgICBidG4uaW5uZXJIVE1MPSdcdXsxRjQ0MX0gJythbnM7CiAgICBidG4udGl0bGU9J0NsaWNrIHRvIGZpbGw6ICcrYW5zOwogICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpewogICAgICBpbnAudmFsdWU9YW5zOyBpbnAuY2xhc3NMaXN0LmFkZCgnY29ycmVjdCcpOyBpbnAuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JykpOwogICAgICBidG4uZGlzYWJsZWQ9dHJ1ZTsKICAgIH0pOwogICAgaW5wLmluc2VydEFkamFjZW50RWxlbWVudCgnYWZ0ZXJlbmQnLCBidG4pOwogIH0pKHFpKTsKfQoKfSkoKTsK'));<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>All English 4U Grammar IELTS TOEFL Cambridge CELPIP Dictation Back Grammar IELTS TOEFL Cambridge CELPIP Dictation Cambridge English &#183; Key (KET) KET 7 &#8212; Test 4Reading &amp; Writing Practise the full A2 Key Reading &amp; Writing paper &#8212; 9 parts, 56 questions, instant auto-grading. Test yourself like the real exam, then check answers and learn [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-with-title","meta":{"footnotes":""},"class_list":["post-4614","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/4614","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/comments?post=4614"}],"version-history":[{"count":2,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/4614\/revisions"}],"predecessor-version":[{"id":5868,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/4614\/revisions\/5868"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=4614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}