{"id":51950,"date":"2026-09-14T10:21:38","date_gmt":"2026-09-14T08:21:38","guid":{"rendered":"https:\/\/www.recharge.com\/blog\/madden-27-squad-builder"},"modified":"2026-09-14T13:07:51","modified_gmt":"2026-09-14T11:07:51","slug":"madden-27-squad-builder","status":"publish","type":"post","link":"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder","title":{"rendered":"Madden NFL 27 Squad Builder: Build a Lineup From All 3,111 Players"},"content":{"rendered":"\n<p>Build a <strong>Madden NFL 27<\/strong> lineup below from EA\u2019s published launch ratings \u2014 all <strong>3,111 players<\/strong>, every position, plus the <strong>1,240 free agents<\/strong> most databases leave out. Pick a personnel grouping, tap any slot, and your average overall updates as you go.<\/p>\n\n\n\n<p>Your lineup saves in your browser, so you can close the tab and come back to it. Nothing is uploaded and no account is needed.<\/p>\n\n\n\n<div class=\"rcw-fc rcw-mdsb\" id=\"rcw-mdsb\">\n<script>eval(new TextDecoder().decode(Uint8Array.from(atob(\"ZXZhbChuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoVWludDhBcnJheS5mcm9tKGF0b2IoIktHWjFibU4wYVc5dUtDbDdkbUZ5SUhNOVpHOWpkVzFsYm5RdVkzSmxZWFJsUld4bGJXVnVkQ2dpYzNSNWJHVWlLVHR6TG5SbGVIUkRiMjUwWlc1MFBTSmNiaTV5WTNjdGJXUnpZbnRtYjI1MExXWmhiV2xzZVRwY0lrRjJaVzVwY2lCT1pYaDBYQ0lzUm5WMGRYSmhMRndpVTJWbmIyVWdWVWxjSWl4emVYTjBaVzB0ZFdrc2MyRnVjeTF6WlhKcFpqdGlZV05yWjNKdmRXNWtPaU5HTkVZMlJqWTdZbTl5WkdWeU9qRndlQ0J6YjJ4cFpDQWpSVE5GT0VVNE8ySnZjbVJsY2kxeVlXUnBkWE02TVRad2VEdHdZV1JrYVc1bk9qSXdjSGc3WTI5c2IzSTZJekJFTWpReU5qdHNhVzVsTFdobGFXZG9kRG94TGpRMU8yMWhlQzEzYVdSMGFEb3hNREFsZlZ4dUxuSmpkeTF0WkhOaUlDb3NMbkpqZHkxdFpITmlJQ282T21KbFptOXlaU3d1Y21OM0xXMWtjMklnS2pvNllXWjBaWEo3WW05NExYTnBlbWx1WnpwaWIzSmtaWEl0WW05NGZWeHVMbkpqZHkxdFpITmlJR2d4TEM1eVkzY3RiV1J6WWlCb01pd3VjbU4zTFcxa2MySWdhRE1zTG5KamR5MXRaSE5pSUdnMGUyTnZiRzl5T2lNd01ETTNNMFFoYVcxd2IzSjBZVzUwZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMTBhWFJzWlh0dFlYSm5hVzQ2TUR0bWIyNTBMWE5wZW1VNk1qRndlRHRtYjI1MExYZGxhV2RvZERvNE1EQTdiR1YwZEdWeUxYTndZV05wYm1jNkxTNHdNV1Z0ZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMXpkV0o3YldGeVoybHVPalJ3ZUNBd0lERTJjSGc3WTI5c2IzSTZJemN6T0VFNFF6dG1iMjUwTFhOcGVtVTZNVE11TlhCNGZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTFpWVhKN1pHbHpjR3hoZVRwbWJHVjRPMmRoY0RvNWNIZzdabXhsZUMxM2NtRndPbmR5WVhBN1lXeHBaMjR0YVhSbGJYTTZjM1J5WlhSamFEdHRZWEpuYVc0Nk1DQXdJREUwY0hoOVhHNHVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMWE5sYkhkeVlYQjdjRzl6YVhScGIyNDZjbVZzWVhScGRtVTdabXhsZURveElERWdNalV3Y0hnN2JXRjRMWGRwWkhSb09qRXdNQ1Y5WEc0dWNtTjNMVzFrYzJJZ0xuSmpkeTF0WkhOaUxYTmxiSHQzYVdSMGFEb3hNREFsTzJGd2NHVmhjbUZ1WTJVNmJtOXVaVHN0ZDJWaWEybDBMV0Z3Y0dWaGNtRnVZMlU2Ym05dVpUc3RiVzk2TFdGd2NHVmhjbUZ1WTJVNmJtOXVaVHRtYjI1MExXWmhiV2xzZVRwcGJtaGxjbWwwTzJadmJuUXRjMmw2WlRveE5DNDFjSGc3Wm05dWRDMTNaV2xuYUhRNk56QXdPMk52Ykc5eU9pTXdSREkwTWpZN1ltRmphMmR5YjNWdVpEb2pabVptTzJKdmNtUmxjam95Y0hnZ2MyOXNhV1FnSTBVelJUaEZPRHRpYjNKa1pYSXRjbUZrYVhWek9qRXljSGc3Y0dGa1pHbHVaem94TTNCNElETTJjSGdnTVROd2VDQXhNM0I0TzJOMWNuTnZjanB3YjJsdWRHVnlmVnh1TG5KamR5MXRaSE5pSUM1eVkzY3RiV1J6WWkxelpXdzZabTlqZFhON2IzVjBiR2x1WlRvd08ySnZjbVJsY2kxamIyeHZjam9qTURCRk1EY3dmVnh1TG5KamR5MXRaSE5pSUM1eVkzY3RiV1J6WWkxelpXeDNjbUZ3T2pwaFpuUmxjbnRqYjI1MFpXNTBPbHdpWENJN2NHOXphWFJwYjI0NllXSnpiMngxZEdVN2NtbG5hSFE2TVRSd2VEdDBiM0E2TlRBbE8yMWhjbWRwYmkxMGIzQTZMVE53ZUR0aWIzSmtaWEk2Tm5CNElITnZiR2xrSUhSeVlXNXpjR0Z5Wlc1ME8ySnZjbVJsY2kxMGIzQTZOM0I0SUhOdmJHbGtJQ013TURNM00wUTdjRzlwYm5SbGNpMWxkbVZ1ZEhNNmJtOXVaWDFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdFluUnVlMlpzWlhnNk1DQXdJR0YxZEc4N1ltRmphMmR5YjNWdVpEb2pabVptTzJOdmJHOXlPaU13TURNM00wUTdabTl1ZEMxM1pXbG5hSFE2TnpBd08yWnZiblF0Wm1GdGFXeDVPbWx1YUdWeWFYUTdabTl1ZEMxemFYcGxPakUwTGpWd2VEdGliM0prWlhJNk1YQjRJSE52Ykdsa0lDTkZNMFU0UlRnN1ltOXlaR1Z5TFhKaFpHbDFjem81T1Rsd2VEdHdZV1JrYVc1bk9qRXpjSGdnTWpCd2VEdGpkWEp6YjNJNmNHOXBiblJsY24xY2JpNXlZM2N0YldSellpQXVjbU4zTFcxa2MySXRZblJ1T21odmRtVnllMkp2Y21SbGNpMWpiMnh2Y2pvall6WmtNbVF5ZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMXZhMko3WW1GamEyZHliM1Z1WkRvalJVRkdRa1l5TzJKdmNtUmxjaTFqYjJ4dmNqb2pNREJGTURjd08yTnZiRzl5T2lNd01EWXhNME45WEc0dWNtTjNMVzFrYzJJZ0xuSmpkeTF0WkhOaUxXUmhibWRsY21KN1ltRmphMmR5YjNWdVpEb2pSa1JGUTBWQk8ySnZjbVJsY2kxamIyeHZjam9qUlRoQ05FRkZPMk52Ykc5eU9pTkRNRE01TWtKOVhHNWNiaTV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0YzNSaGRITjdaR2x6Y0d4aGVUcG1iR1Y0TzJkaGNEb3hNSEI0TzJac1pYZ3RkM0poY0RwM2NtRndPMjFoY21kcGJqb3dJREFnTVRSd2VIMWNiaTV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0YzNSaGRIdG1iR1Y0T2pFZ01TQXhNRFJ3ZUR0aVlXTnJaM0p2ZFc1a09pTXdNRE0zTTBRN1ltOXlaR1Z5TFhKaFpHbDFjem94TW5CNE8zQmhaR1JwYm1jNk1URndlQ0F4TTNCNGZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTF6YTN0dFlYSm5hVzQ2TUNBd0lETndlRHRtYjI1MExYTnBlbVU2TVRBdU5YQjRPMlp2Ym5RdGQyVnBaMmgwT2pnd01EdHNaWFIwWlhJdGMzQmhZMmx1WnpvdU1XVnRPM1JsZUhRdGRISmhibk5tYjNKdE9uVndjR1Z5WTJGelpUdGpiMnh2Y2pvak4wWkZPVUkwZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMXpkbnR0WVhKbmFXNDZNRHRtYjI1MExYTnBlbVU2TVRsd2VEdG1iMjUwTFhkbGFXZG9kRG80TURBN1kyOXNiM0k2STJabVpuMWNiaTV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0YzNZZ2MyMWhiR3g3Wm05dWRDMXphWHBsT2pFeWNIZzdabTl1ZEMxM1pXbG5hSFE2TnpBd08yTnZiRzl5T2lNNVJrVTRRelo5WEc1Y2JpOHFJQzB0TFMwZ1ptbGxiR1FnTFMwdExTQXFMMXh1TG5KamR5MXRaSE5pSUM1eVkzY3RiV1J6WWkxbWFXVnNaSHR3YjNOcGRHbHZianB5Wld4aGRHbDJaVHQzYVdSMGFEb3hNREFsTzNCaFpHUnBibWN0ZEc5d09qY3lKVHRpWVdOclozSnZkVzVrT2lNd1pEVmpNMlk3WW05eVpHVnlPakZ3ZUNCemIyeHBaQ0FqTUdFelpUTXdPMkp2Y21SbGNpMXlZV1JwZFhNNk1UUndlRHR2ZG1WeVpteHZkenBvYVdSa1pXNDdiV0Z5WjJsdU9qQWdNQ0F4TW5CNGZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTEwZFhKbWUzQnZjMmwwYVc5dU9tRmljMjlzZFhSbE8yeGxablE2TUR0eWFXZG9kRG93TzNSdmNEb3dPMkp2ZEhSdmJUb3dPMkpoWTJ0bmNtOTFibVE2Y21Wd1pXRjBhVzVuTFd4cGJtVmhjaTFuY21Ga2FXVnVkQ2c1TUdSbFp5d2pNR1ExWXpObUlEQXNJekJrTldNelppQTRMak16SlN3ak1USTJPRFJoSURndU16TWxMQ014TWpZNE5HRWdNVFl1TmpZbEtYMWNiaTV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0WlhwN2NHOXphWFJwYjI0NllXSnpiMngxZEdVN2JHVm1kRG93TzNKcFoyaDBPakE3YUdWcFoyaDBPamtsTzJKaFkydG5jbTkxYm1RNkl6QTVNMll5WXp0a2FYTndiR0Y1T21ac1pYZzdZV3hwWjI0dGFYUmxiWE02WTJWdWRHVnlPMnAxYzNScFpua3RZMjl1ZEdWdWREcGpaVzUwWlhKOVhHNHVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMV1Y2TFhSN2RHOXdPakE3WW05eVpHVnlMV0p2ZEhSdmJUb3ljSGdnYzI5c2FXUWdjbWRpWVNneU5UVXNNalUxTERJMU5Td3VOVFVwZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMWxlaTFpZTJKdmRIUnZiVG93TzJKdmNtUmxjaTEwYjNBNk1uQjRJSE52Ykdsa0lISm5ZbUVvTWpVMUxESTFOU3d5TlRVc0xqVTFLWDFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdFpYcDBlMlp2Ym5RdGMybDZaVG94TUhCNE8yWnZiblF0ZDJWcFoyaDBPamd3TUR0c1pYUjBaWEl0YzNCaFkybHVaem91TXpSbGJUdGpiMnh2Y2pweVoySmhLREkxTlN3eU5UVXNNalUxTEM0ME1pazdkR1Y0ZEMxMGNtRnVjMlp2Y20wNmRYQndaWEpqWVhObGZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTFzYVc1bGMzdHdiM05wZEdsdmJqcGhZbk52YkhWMFpUdHNaV1owT2pBN2NtbG5hSFE2TUR0MGIzQTZPU1U3WW05MGRHOXRPamtsTzNvdGFXNWtaWGc2TVgxY2JpNXlZM2N0YldSellpQXVjbU4zTFcxa2MySXRiRzU3Y0c5emFYUnBiMjQ2WVdKemIyeDFkR1U3YkdWbWREb3dPM0pwWjJoME9qQTdhR1ZwWjJoME9qRndlRHRpWVdOclozSnZkVzVrT25KblltRW9NalUxTERJMU5Td3lOVFVzTGpNMEtYMWNiaTV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0Ykc0MWUySmhZMnRuY205MWJtUTZjbWRpWVNneU5UVXNNalUxTERJMU5Td3VNVGNwZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMXVkVzE3Y0c5emFYUnBiMjQ2WVdKemIyeDFkR1U3Wm05dWRDMXphWHBsT2pFd2NIZzdabTl1ZEMxM1pXbG5hSFE2T0RBd08yTnZiRzl5T25KblltRW9NalUxTERJMU5Td3lOVFVzTGpNMEtYMWNiaTV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0Ykc5emUzQnZjMmwwYVc5dU9tRmljMjlzZFhSbE8yeGxablE2TUR0eWFXZG9kRG93TzJobGFXZG9kRG95Y0hnN1ltRmphMmR5YjNWdVpEb2pSa1pDTmpJM08ySnZlQzF6YUdGa2IzYzZNQ0F3SURkd2VDQnlaMkpoS0RJMU5Td3hPRElzTXprc0xqYzFLVHQ2TFdsdVpHVjRPako5WEc0dWNtTjNMVzFrYzJJZ0xuSmpkeTF0WkhOaUxXeHZjM1I3Y0c5emFYUnBiMjQ2WVdKemIyeDFkR1U3Y21sbmFIUTZOM0I0TzNSeVlXNXpabTl5YlRwMGNtRnVjMnhoZEdWWktDMHhNREFsS1R0bWIyNTBMWE5wZW1VNk9YQjRPMlp2Ym5RdGQyVnBaMmgwT2pnd01EdHNaWFIwWlhJdGMzQmhZMmx1WnpvdU1EbGxiVHRqYjJ4dmNqb2pSa1pDTmpJM08zUmxlSFF0ZEhKaGJuTm1iM0p0T25Wd2NHVnlZMkZ6WlR0NkxXbHVaR1Y0T2pKOVhHNHVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMWE5zYjNSemUzQnZjMmwwYVc5dU9tRmljMjlzZFhSbE8yeGxablE2TUR0eWFXZG9kRG93TzNSdmNEb3dPMkp2ZEhSdmJUb3dPM290YVc1a1pYZzZNMzFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdGMyeHZkSHR3YjNOcGRHbHZianBoWW5OdmJIVjBaVHQwY21GdWMyWnZjbTA2ZEhKaGJuTnNZWFJsS0MwMU1DVXNMVFV3SlNrN2QybGtkR2c2TmpSd2VEdGlZV05yWjNKdmRXNWtPblJ5WVc1emNHRnlaVzUwTzJKdmNtUmxjam93TzNCaFpHUnBibWM2TUR0amRYSnpiM0k2Y0c5cGJuUmxjanRtYjI1MExXWmhiV2xzZVRwcGJtaGxjbWwwZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMXpiRzkwT21adlkzVnpMWFpwYzJsaWJHVjdiM1YwYkdsdVpUb3ljSGdnYzI5c2FXUWdJMFpHUWpZeU56dHZkWFJzYVc1bExXOW1abk5sZERvemNIZzdZbTl5WkdWeUxYSmhaR2wxY3pveE1IQjRmVnh1TG5KamR5MXRaSE5pSUM1eVkzY3RiV1J6WWkxbGJYQjBlV043WkdsemNHeGhlVHBtYkdWNE8yRnNhV2R1TFdsMFpXMXpPbU5sYm5SbGNqdHFkWE4wYVdaNUxXTnZiblJsYm5RNlkyVnVkR1Z5TzNkcFpIUm9PalEwY0hnN2FHVnBaMmgwT2pRMGNIZzdiV0Z5WjJsdU9qQWdZWFYwYnp0aWIzSmtaWEl0Y21Ga2FYVnpPalV3SlR0aWIzSmtaWEk2TW5CNElHUmhjMmhsWkNCeVoySmhLREkxTlN3eU5UVXNNalUxTEM0Mk1pazdZMjlzYjNJNkkyWm1aanRtYjI1MExYTnBlbVU2TVRBdU5YQjRPMlp2Ym5RdGQyVnBaMmgwT2pnd01EdHNaWFIwWlhJdGMzQmhZMmx1WnpvdU1ETmxiVHRpWVdOclozSnZkVzVrT25KblltRW9NQ3d3TERBc0xqRTJLWDFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdFptRmpaWGR5WVhCN2NHOXphWFJwYjI0NmNtVnNZWFJwZG1VN2QybGtkR2c2TkRod2VEdG9aV2xuYUhRNk5EaHdlRHR0WVhKbmFXNDZNQ0JoZFhSdmZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTFtWVdObGUzZHBaSFJvT2pRNGNIZzdhR1ZwWjJoME9qUTRjSGc3WW05eVpHVnlMWEpoWkdsMWN6bzFNQ1U3YjJKcVpXTjBMV1pwZERwamIzWmxjanRpWVdOclozSnZkVzVrT2lNd1JESTBNalk3WW05eVpHVnlPakp3ZUNCemIyeHBaQ0FqWm1abWZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTFwYm1sMGUyUnBjM0JzWVhrNlpteGxlRHRoYkdsbmJpMXBkR1Z0Y3pwalpXNTBaWEk3YW5WemRHbG1lUzFqYjI1MFpXNTBPbU5sYm5SbGNqdDNhV1IwYURvME9IQjRPMmhsYVdkb2REbzBPSEI0TzJKdmNtUmxjaTF5WVdScGRYTTZOVEFsTzJKdmNtUmxjam95Y0hnZ2MyOXNhV1FnSTJabVpqdGpiMnh2Y2pvalptWm1PMlp2Ym5RdGMybDZaVG94TkhCNE8yWnZiblF0ZDJWcFoyaDBPamd3TUgxY2JpNXlZM2N0YldSellpQXVjbU4zTFcxa2MySXRiM1p5ZTNCdmMybDBhVzl1T21GaWMyOXNkWFJsTzJ4bFpuUTZMVFp3ZUR0MGIzQTZMVFJ3ZUR0dGFXNHRkMmxrZEdnNk1qSndlRHRvWldsbmFIUTZNakp3ZUR0d1lXUmthVzVuT2pBZ05IQjRPMkp2Y21SbGNpMXlZV1JwZFhNNk4zQjRPMlJwYzNCc1lYazZabXhsZUR0aGJHbG5iaTFwZEdWdGN6cGpaVzUwWlhJN2FuVnpkR2xtZVMxamIyNTBaVzUwT21ObGJuUmxjanRtYjI1MExYTnBlbVU2TVRFdU5YQjRPMlp2Ym5RdGQyVnBaMmgwT2pnd01EdGpiMnh2Y2pvalptWm1PMkp2Y21SbGNqb3hjSGdnYzI5c2FXUWdjbWRpWVNnd0xEQXNNQ3d1TWlsOVhHNHVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMWFF4ZTJKaFkydG5jbTkxYm1RNkl6ZEROVU5FTm4wdWNtTjNMVzFrYzJJZ0xuSmpkeTF0WkhOaUxYUXllMkpoWTJ0bmNtOTFibVE2SXpCR056WTJSWDFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdGRETjdZbUZqYTJkeWIzVnVaRG9qTVVVNFEwSkZmUzV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0ZERSN1ltRmphMmR5YjNWdVpEb2pOVUUyUWpaRWZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTEwTlh0aVlXTnJaM0p2ZFc1a09pTkNORFUxTWtSOVhHNHVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMV055WlhOMGUzQnZjMmwwYVc5dU9tRmljMjlzZFhSbE8zSnBaMmgwT2kwM2NIZzdZbTkwZEc5dE9pMHpjSGc3ZDJsa2RHZzZNakZ3ZUR0b1pXbG5hSFE2TWpGd2VEdGliM0prWlhJdGNtRmthWFZ6T2pVd0pUdGlZV05yWjNKdmRXNWtPaU5tWm1ZN2IySnFaV04wTFdacGREcGpiMjUwWVdsdU8ySnZjbVJsY2pveGNIZ2djMjlzYVdRZ0kwVXpSVGhGT0gxY2JpNXlZM2N0YldSellpQXVjbU4zTFcxa2MySXRZM0psYzNScGJtbDBlM0J2YzJsMGFXOXVPbUZpYzI5c2RYUmxPM0pwWjJoME9pMDNjSGc3WW05MGRHOXRPaTB6Y0hnN2QybGtkR2c2TWpGd2VEdG9aV2xuYUhRNk1qRndlRHRpYjNKa1pYSXRjbUZrYVhWek9qVXdKVHRpWVdOclozSnZkVzVrT2lObVptWTdZbTl5WkdWeU9qRndlQ0J6YjJ4cFpDQWpSVE5GT0VVNE8yUnBjM0JzWVhrNlpteGxlRHRoYkdsbmJpMXBkR1Z0Y3pwalpXNTBaWEk3YW5WemRHbG1lUzFqYjI1MFpXNTBPbU5sYm5SbGNqdG1iMjUwTFhOcGVtVTZNVEJ3ZUR0bWIyNTBMWGRsYVdkb2REbzRNREE3WTI5c2IzSTZJekF3TXpjelJIMWNiaTV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0WVdKN2NHOXphWFJwYjI0NllXSnpiMngxZEdVN2JHVm1kRG90TjNCNE8ySnZkSFJ2YlRvdE5IQjRPM2RwWkhSb09qRTNjSGc3YUdWcFoyaDBPakUzY0hnN1ltOXlaR1Z5TFhKaFpHbDFjem8xTUNVN1pHbHpjR3hoZVRwbWJHVjRPMkZzYVdkdUxXbDBaVzF6T21ObGJuUmxjanRxZFhOMGFXWjVMV052Ym5SbGJuUTZZMlZ1ZEdWeU8yWnZiblF0YzJsNlpUbzVjSGc3Wm05dWRDMTNaV2xuYUhRNk9EQXdPMk52Ykc5eU9pTXlRVEZCTURBN1ltOXlaR1Z5T2pGd2VDQnpiMnhwWkNCeVoySmhLREFzTUN3d0xDNHlLWDFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdFlXSjRlMkpoWTJ0bmNtOTFibVE2STBaR1FqWXlOMzFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdFlXSnplMkpoWTJ0bmNtOTFibVE2STBNNVJUUkdNanRqYjJ4dmNqb2pNRVkwTWpVMmZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTF2YjNCN2NHOXphWFJwYjI0NllXSnpiMngxZEdVN2JHVm1kRG8xTUNVN2RHOXdPaTAzY0hnN2RISmhibk5tYjNKdE9uUnlZVzV6YkdGMFpWZ29MVFV3SlNrN2NHRmtaR2x1Wnpvd0lEVndlRHRvWldsbmFIUTZNVFZ3ZUR0aWIzSmtaWEl0Y21Ga2FYVnpPams1T1hCNE8ySmhZMnRuY205MWJtUTZJME13TXpreVFqdGliM0prWlhJNk1YQjRJSE52Ykdsa0lDTm1abVk3WTI5c2IzSTZJMlptWmp0bWIyNTBMWE5wZW1VNk9DNDFjSGc3Wm05dWRDMTNaV2xuYUhRNk9EQXdPMnhsZEhSbGNpMXpjR0ZqYVc1bk9pNHdOV1Z0TzJScGMzQnNZWGs2Wm14bGVEdGhiR2xuYmkxcGRHVnRjenBqWlc1MFpYSjlYRzR1Y21OM0xXMWtjMklnTG5KamR5MXRaSE5pTFhOdVlXMWxlMlJwYzNCc1lYazZZbXh2WTJzN2JXRnlaMmx1T2pSd2VDQmhkWFJ2SURBN2JXRjRMWGRwWkhSb09qWTBjSGc3ZEdWNGRDMWhiR2xuYmpwalpXNTBaWEk3Wm05dWRDMXphWHBsT2pFd0xqVndlRHRtYjI1MExYZGxhV2RvZERvM01EQTdZMjlzYjNJNkkyWm1aanQwWlhoMExYTm9ZV1J2ZHpvd0lERndlQ0F6Y0hnZ2NtZGlZU2d3TERBc01Dd3VOelVwTzI5MlpYSm1iRzkzT21ocFpHUmxianQwWlhoMExXOTJaWEptYkc5M09tVnNiR2x3YzJsek8zZG9hWFJsTFhOd1lXTmxPbTV2ZDNKaGNIMWNiaTV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0Y205c1pYUjdaR2x6Y0d4aGVUcGliRzlqYXp0MFpYaDBMV0ZzYVdkdU9tTmxiblJsY2p0bWIyNTBMWE5wZW1VNk9YQjRPMlp2Ym5RdGQyVnBaMmgwT2pnd01EdHNaWFIwWlhJdGMzQmhZMmx1WnpvdU1EZGxiVHRqYjJ4dmNqb2pPVVpGT0VNMk8zUmxlSFF0YzJoaFpHOTNPakFnTVhCNElETndlQ0J5WjJKaEtEQXNNQ3d3TEM0M05TbDlYRzVjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdGJtOTBaWHR0WVhKbmFXNDZNQ0F3SURFeWNIZzdabTl1ZEMxemFYcGxPakV6Y0hnN1kyOXNiM0k2SXpoaE0ySXhNanRpWVdOclozSnZkVzVrT2lOR1JFWXpSVGM3WW05eVpHVnlPakZ3ZUNCemIyeHBaQ0FqUmpCRU5rSTBPMkp2Y21SbGNpMXlZV1JwZFhNNk1UQndlRHR3WVdSa2FXNW5PakV3Y0hnZ01USndlSDFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdFptOXZkSHR0WVhKbmFXNDZNVFJ3ZUNBeWNIZ2dNRHRtYjI1MExYTnBlbVU2TVRFdU5YQjRPMk52Ykc5eU9pTTVSa0l3UWpGOVhHNHVjbU4zTFcxa2MySWdXMmhwWkdSbGJsMTdaR2x6Y0d4aGVUcHViMjVsSVdsdGNHOXlkR0Z1ZEgxY2JseHVMeW9nTFMwdExTQndhV05yWlhJZ0xTMHRMU0FxTDF4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMWlZV05yWkhKdmNIdHdiM05wZEdsdmJqcG1hWGhsWkR0c1pXWjBPakE3Y21sbmFIUTZNRHQwYjNBNk1EdGliM1IwYjIwNk1EdGlZV05yWjNKdmRXNWtPbkpuWW1Fb05Dd3lNQ3d5TWl3dU5UVXBPM290YVc1a1pYZzZOakI5WEc0dWNtTjNMVzFrYzJJZ0xuSmpkeTF0WkhOaUxYQmhibVZzZTNCdmMybDBhVzl1T21acGVHVmtPMnhsWm5RNk5UQWxPM1J2Y0RvMU1DVTdkSEpoYm5ObWIzSnRPblJ5WVc1emJHRjBaU2d0TlRBbExDMDFNQ1VwTzNkcFpIUm9PbTFwYmlnMU5qQndlQ3c1TkhaM0tUdHRZWGd0YUdWcFoyaDBPamcyZG1nN1pHbHpjR3hoZVRwbWJHVjRPMlpzWlhndFpHbHlaV04wYVc5dU9tTnZiSFZ0Ymp0aVlXTnJaM0p2ZFc1a09pTm1abVk3WW05eVpHVnlMWEpoWkdsMWN6b3hObkI0TzNvdGFXNWtaWGc2TmpFN2IzWmxjbVpzYjNjNmFHbGtaR1Z1ZlZ4dUxuSmpkeTF0WkhOaU9tNXZkQ2d1Y21OM0xXMWtjMkl0YjNCbGJpa2dMbkpqZHkxdFpITmlMV0poWTJ0a2NtOXdMQzV5WTNjdGJXUnpZanB1YjNRb0xuSmpkeTF0WkhOaUxXOXdaVzRwSUM1eVkzY3RiV1J6WWkxd1lXNWxiSHRrYVhOd2JHRjVPbTV2Ym1WOVhHNHVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMWEJvWldGa2UyUnBjM0JzWVhrNlpteGxlRHRuWVhBNk1UQndlRHRoYkdsbmJpMXBkR1Z0Y3pwalpXNTBaWEk3Y0dGa1pHbHVaem94TlhCNElERTJjSGc3WW05eVpHVnlMV0p2ZEhSdmJUb3hjSGdnYzI5c2FXUWdJMFV6UlRoRk9IMWNiaTV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0Y0hScGRHeGxlMjFoY21kcGJqb3dPMlpzWlhnNk1TQXhJR0YxZEc4N1ptOXVkQzF6YVhwbE9qRTJjSGc3Wm05dWRDMTNaV2xuYUhRNk9EQXdmVnh1TG5KamR5MXRaSE5pSUM1eVkzY3RiV1J6WWkxNGUyWnNaWGc2TUNBd0lHRjFkRzg3WW1GamEyZHliM1Z1WkRvalJqUkdOa1kyTzJKdmNtUmxjam94Y0hnZ2MyOXNhV1FnSTBVelJUaEZPRHRpYjNKa1pYSXRjbUZrYVhWek9qazVPWEI0TzNkcFpIUm9Pak15Y0hnN2FHVnBaMmgwT2pNeWNIZzdabTl1ZEMxemFYcGxPakUzY0hnN2JHbHVaUzFvWldsbmFIUTZNVHRqYjJ4dmNqb2pNREF6TnpORU8yTjFjbk52Y2pwd2IybHVkR1Z5TzJadmJuUXRabUZ0YVd4NU9tbHVhR1Z5YVhSOVhHNHVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMWEIwYjI5c2MzdGthWE53YkdGNU9tWnNaWGc3WjJGd09qaHdlRHR3WVdSa2FXNW5PakV5Y0hnZ01UWndlRHRpYjNKa1pYSXRZbTkwZEc5dE9qRndlQ0J6YjJ4cFpDQWpSVE5GT0VVNE8yWnNaWGd0ZDNKaGNEcDNjbUZ3ZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMXpaV0Z5WTJoN1pteGxlRG94SURFZ01UZ3djSGc3YldsdUxYZHBaSFJvT2pBN1ptOXVkQzFtWVcxcGJIazZhVzVvWlhKcGREdG1iMjUwTFhOcGVtVTZNVFZ3ZUR0amIyeHZjam9qTUVReU5ESTJPMkpoWTJ0bmNtOTFibVE2STBZM1JrRkdRVHRpYjNKa1pYSTZNbkI0SUhOdmJHbGtJQ05GTTBVNFJUZzdZbTl5WkdWeUxYSmhaR2wxY3pveE1IQjRPM0JoWkdScGJtYzZNVEZ3ZUNBeE1uQjRmVnh1TG5KamR5MXRaSE5pSUM1eVkzY3RiV1J6WWkxelpXRnlZMmc2Wm05amRYTjdiM1YwYkdsdVpUb3dPMkp2Y21SbGNpMWpiMnh2Y2pvak1EQkZNRGN3TzJKaFkydG5jbTkxYm1RNkkyWm1abjFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdGRITmxiSHRtYkdWNE9qQWdNQ0JoZFhSdk8yMWhlQzEzYVdSMGFEb3hOekJ3ZUR0bWIyNTBMV1poYldsc2VUcHBibWhsY21sME8yWnZiblF0YzJsNlpUb3hNM0I0TzJadmJuUXRkMlZwWjJoME9qY3dNRHRqYjJ4dmNqb2pNREF6TnpORU8ySmhZMnRuY205MWJtUTZJMFkwUmpaR05qdGliM0prWlhJNk1YQjRJSE52Ykdsa0lDTkZNMFU0UlRnN1ltOXlaR1Z5TFhKaFpHbDFjem81T1Rsd2VEdHdZV1JrYVc1bk9qRXhjSGdnTVROd2VEdGpkWEp6YjNJNmNHOXBiblJsY2p0aGNIQmxZWEpoYm1ObE9tNXZibVU3TFhkbFltdHBkQzFoY0hCbFlYSmhibU5sT201dmJtVTdMVzF2ZWkxaGNIQmxZWEpoYm1ObE9tNXZibVY5WEc0dWNtTjNMVzFrYzJJZ0xuSmpkeTF0WkhOaUxYUnZaM3RtYkdWNE9qQWdNQ0JoZFhSdk8ySmhZMnRuY205MWJtUTZJMFkwUmpaR05qdGliM0prWlhJNk1YQjRJSE52Ykdsa0lDTkZNMFU0UlRnN1ltOXlaR1Z5TFhKaFpHbDFjem81T1Rsd2VEdHdZV1JrYVc1bk9qRXhjSGdnTVRWd2VEdG1iMjUwTFdaaGJXbHNlVHBwYm1obGNtbDBPMlp2Ym5RdGMybDZaVG94TTNCNE8yWnZiblF0ZDJWcFoyaDBPamN3TUR0amIyeHZjam9qTURBek56TkVPMk4xY25OdmNqcHdiMmx1ZEdWeWZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTEwYjJkYllYSnBZUzF3Y21WemMyVmtQVndpZEhKMVpWd2lYWHRpWVdOclozSnZkVzVrT2lORlFVWkNSakk3WW05eVpHVnlMV052Ykc5eU9pTXdNRVV3TnpBN1kyOXNiM0k2SXpBd05qRXpRMzFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdGNHeHBjM1I3Wm14bGVEb3hJREVnWVhWMGJ6dHZkbVZ5Wm14dmR5MTVPbUYxZEc4N2NHRmtaR2x1WnpvNGNIaDlYRzR1Y21OM0xXMWtjMklnTG5KamR5MXRaSE5pTFhKdmQzdGthWE53YkdGNU9tWnNaWGc3WjJGd09qRXdjSGc3WVd4cFoyNHRhWFJsYlhNNlkyVnVkR1Z5TzNkcFpIUm9PakV3TUNVN2RHVjRkQzFoYkdsbmJqcHNaV1owTzJKaFkydG5jbTkxYm1RNkkyWm1aanRpYjNKa1pYSTZNRHRpYjNKa1pYSXRZbTkwZEc5dE9qRndlQ0J6YjJ4cFpDQWpSakJHTTBZek8zQmhaR1JwYm1jNk9YQjRJRGh3ZUR0amRYSnpiM0k2Y0c5cGJuUmxjanRtYjI1MExXWmhiV2xzZVRwcGJtaGxjbWwwZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMXliM2M2YUc5MlpYSjdZbUZqYTJkeWIzVnVaRG9qUmpkR1FVWkJmVnh1TG5KamR5MXRaSE5pSUM1eVkzY3RiV1J6WWkxa2FXMXllMjl3WVdOcGRIazZMalExZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMXlabUZqWlh0M2FXUjBhRG96T0hCNE8yaGxhV2RvZERvek9IQjRPMkp2Y21SbGNpMXlZV1JwZFhNNk5UQWxPMjlpYW1WamRDMW1hWFE2WTI5MlpYSTdZbUZqYTJkeWIzVnVaRG9qUlRORk9FVTRPMlpzWlhnNk1DQXdJR0YxZEc5OVhHNHVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMWEp0WVdsdWUyWnNaWGc2TVNBeElHRjFkRzg3YldsdUxYZHBaSFJvT2pCOVhHNHVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMWEp1WVcxbGUyUnBjM0JzWVhrNllteHZZMnM3Wm05dWRDMXphWHBsT2pFMGNIZzdabTl1ZEMxM1pXbG5hSFE2TnpBd08yTnZiRzl5T2lNd1JESTBNalk3YjNabGNtWnNiM2M2YUdsa1pHVnVPM1JsZUhRdGIzWmxjbVpzYjNjNlpXeHNhWEJ6YVhNN2QyaHBkR1V0YzNCaFkyVTZibTkzY21Gd2ZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTF5YldWMFlYdGthWE53YkdGNU9tWnNaWGc3WjJGd09qWndlRHRoYkdsbmJpMXBkR1Z0Y3pwalpXNTBaWEk3Wm14bGVDMTNjbUZ3T25keVlYQTdiV0Z5WjJsdUxYUnZjRG95Y0hoOVhHNHVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMWEp3YjNON1ptOXVkQzF6YVhwbE9qRXdMalZ3ZUR0bWIyNTBMWGRsYVdkb2REbzRNREE3YkdWMGRHVnlMWE53WVdOcGJtYzZMakExWlcwN1kyOXNiM0k2SXpBd05qRXpRenRpWVdOclozSnZkVzVrT2lORlFVWkNSakk3WW05eVpHVnlMWEpoWkdsMWN6bzVPVGx3ZUR0d1lXUmthVzVuT2pKd2VDQTNjSGg5WEc0dWNtTjNMVzFrYzJJZ0xuSmpkeTF0WkhOaUxYSmpiSFZpZTJadmJuUXRjMmw2WlRveE1uQjRPMk52Ykc5eU9pTTNNemhCT0VNN2IzWmxjbVpzYjNjNmFHbGtaR1Z1TzNSbGVIUXRiM1psY21ac2IzYzZaV3hzYVhCemFYTTdkMmhwZEdVdGMzQmhZMlU2Ym05M2NtRndmVnh1TG5KamR5MXRaSE5pSUM1eVkzY3RiV1J6WWkxeVkzSmxjM1I3ZDJsa2RHZzZNVFp3ZUR0b1pXbG5hSFE2TVRad2VEdHZZbXBsWTNRdFptbDBPbU52Ym5SaGFXNTlYRzR1Y21OM0xXMWtjMklnTG5KamR5MXRaSE5pTFhKaGNtTm9lMlp2Ym5RdGMybDZaVG94TVhCNE8yTnZiRzl5T2lNM1F6VkRSRFk3Wm05dWRDMTNaV2xuYUhRNk56QXdmVnh1TG5KamR5MXRaSE5pSUM1eVkzY3RiV1J6WWkxeVlXSjdabTl1ZEMxemFYcGxPakV3Y0hnN1ptOXVkQzEzWldsbmFIUTZPREF3TzJKdmNtUmxjaTF5WVdScGRYTTZPVGs1Y0hnN2NHRmtaR2x1WnpveWNIZ2dObkI0ZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMXlZV0o0ZTJKaFkydG5jbTkxYm1RNkkwWkdSak5FUWp0amIyeHZjam9qT0dFMVlqQXdmVnh1TG5KamR5MXRaSE5pSUM1eVkzY3RiV1J6WWkxeVlXSnplMkpoWTJ0bmNtOTFibVE2STBWR1JqaEdRenRqYjJ4dmNqb2pNRVkwTWpVMmZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTFwYm5ocGUyWnZiblF0YzJsNlpUb3hNSEI0TzJadmJuUXRkMlZwWjJoME9qZ3dNRHRqYjJ4dmNqb2pNVEkxTlRabU8ySmhZMnRuY205MWJtUTZJMFZHUmpoR1F6dGliM0prWlhJdGNtRmthWFZ6T2prNU9YQjRPM0JoWkdScGJtYzZNbkI0SURkd2VIMWNiaTV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0WW50bWJHVjRPakFnTUNCaGRYUnZPMjFwYmkxM2FXUjBhRG96TW5CNE8yaGxhV2RvZERveU9IQjRPMkp2Y21SbGNpMXlZV1JwZFhNNk9IQjRPMlJwYzNCc1lYazZabXhsZUR0aGJHbG5iaTFwZEdWdGN6cGpaVzUwWlhJN2FuVnpkR2xtZVMxamIyNTBaVzUwT21ObGJuUmxjanRtYjI1MExYTnBlbVU2TVROd2VEdG1iMjUwTFhkbGFXZG9kRG80TURBN1kyOXNiM0k2STJabVpuMWNiaTV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0YzNSaGRHVjdjR0ZrWkdsdVp6b3lObkI0SURFMmNIZzdkR1Y0ZEMxaGJHbG5ianBqWlc1MFpYSjlYRzR1Y21OM0xXMWtjMklnTG5KamR5MXRaSE5pTFhOMFlYUmxkSGgwZTIxaGNtZHBiam94TUhCNElEQWdNVEp3ZUR0bWIyNTBMWE5wZW1VNk1UTXVOWEI0TzJOdmJHOXlPaU0zTXpoQk9FTjlYRzR1Y21OM0xXMWtjMklnTG5KamR5MXRaSE5pTFhOd2FXNTdaR2x6Y0d4aGVUcHBibXhwYm1VdFlteHZZMnM3ZDJsa2RHZzZNakp3ZUR0b1pXbG5hSFE2TWpKd2VEdGliM0prWlhJNk0zQjRJSE52Ykdsa0lDTkZNMFU0UlRnN1ltOXlaR1Z5TFhSdmNDMWpiMnh2Y2pvak1EQkZNRGN3TzJKdmNtUmxjaTF5WVdScGRYTTZOVEFsTzJGdWFXMWhkR2x2YmpweVkzZHRaSE5pSUM0NGN5QnNhVzVsWVhJZ2FXNW1hVzVwZEdWOVhHNUFhMlY1Wm5KaGJXVnpJSEpqZDIxa2MySjdkRzk3ZEhKaGJuTm1iM0p0T25KdmRHRjBaU2d6TmpCa1pXY3BmWDFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdGJXOXlaWHR3WVdSa2FXNW5PakV3Y0hnZ01USndlRHRtYjI1MExYTnBlbVU2TVRJdU5YQjRPMk52Ykc5eU9pTTNNemhCT0VNN2RHVjRkQzFoYkdsbmJqcGpaVzUwWlhKOVhHNHVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMWEJtYjI5MGUzQmhaR1JwYm1jNk1USndlQ0F4Tm5CNE8ySnZjbVJsY2kxMGIzQTZNWEI0SUhOdmJHbGtJQ05GTTBVNFJUaDlYRzR1Y21OM0xXMWtjMklnTG5KamR5MXRaSE5pTFhKbGJYdDNhV1IwYURveE1EQWxPMkpoWTJ0bmNtOTFibVE2STBaRVJVTkZRVHRpYjNKa1pYSTZNWEI0SUhOdmJHbGtJQ05GT0VJMFFVVTdZbTl5WkdWeUxYSmhaR2wxY3pveE1IQjRPM0JoWkdScGJtYzZNVEZ3ZUR0bWIyNTBMV1poYldsc2VUcHBibWhsY21sME8yWnZiblF0YzJsNlpUb3hNeTQxY0hnN1ptOXVkQzEzWldsbmFIUTZOekF3TzJOdmJHOXlPaU5ETURNNU1rSTdZM1Z5YzI5eU9uQnZhVzUwWlhKOVhHNWNiaThxSUMwdExTMGdjMlZzWldOMFpXUXRjR3hoZVdWeUlHUmxkR0ZwYkNCallYSmtJQzB0TFMwZ0tpOWNiaTV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0WTJGeVpIdGlZV05yWjNKdmRXNWtPaU5tWm1ZN1ltOXlaR1Z5T2pGd2VDQnpiMnhwWkNBalJUTkZPRVU0TzJKdmNtUmxjaTF5WVdScGRYTTZNVFJ3ZUR0d1lXUmthVzVuT2pFMmNIZzdiV0Z5WjJsdU9qQWdNQ0F4TW5CNGZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTFqYUdWaFpIdGthWE53YkdGNU9tWnNaWGc3WjJGd09qRXljSGc3WVd4cFoyNHRhWFJsYlhNNlkyVnVkR1Z5TzIxaGNtZHBiam93SURBZ01USndlSDFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdFkyWmhZMlY3ZDJsa2RHZzZOVEp3ZUR0b1pXbG5hSFE2TlRKd2VEdGliM0prWlhJdGNtRmthWFZ6T2pVd0pUdHZZbXBsWTNRdFptbDBPbU52ZG1WeU8ySmhZMnRuY205MWJtUTZJMFV6UlRoRk9EdG1iR1Y0T2pBZ01DQmhkWFJ2ZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMWpiV0ZwYm50bWJHVjRPakVnTVNCaGRYUnZPMjFwYmkxM2FXUjBhRG93ZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMWpibUZ0Wlh0dFlYSm5hVzQ2TUR0bWIyNTBMWE5wZW1VNk1UWndlRHRtYjI1MExYZGxhV2RvZERvNE1EQTdZMjlzYjNJNkl6QXdNemN6UkNGcGJYQnZjblJoYm5SOVhHNHVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMV050WlhSaGUyMWhjbWRwYmpveWNIZ2dNQ0F3TzJadmJuUXRjMmw2WlRveE1pNDFjSGc3WTI5c2IzSTZJemN6T0VFNFEzMWNiaTV5WTNjdGJXUnpZaUF1Y21OM0xXMWtjMkl0WTI5MmNudG1iR1Y0T2pBZ01DQmhkWFJ2TzIxcGJpMTNhV1IwYURvME1uQjRPMmhsYVdkb2REb3pObkI0TzJKdmNtUmxjaTF5WVdScGRYTTZPWEI0TzJScGMzQnNZWGs2Wm14bGVEdGhiR2xuYmkxcGRHVnRjenBqWlc1MFpYSTdhblZ6ZEdsbWVTMWpiMjUwWlc1ME9tTmxiblJsY2p0bWIyNTBMWE5wZW1VNk1UZHdlRHRtYjI1MExYZGxhV2RvZERvNE1EQTdZMjlzYjNJNkkyWm1abjFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdFkyRmljM3RrYVhOd2JHRjVPbVpzWlhnN1oyRndPalp3ZUR0bWJHVjRMWGR5WVhBNmQzSmhjRHR0WVhKbmFXNDZNQ0F3SURFeWNIaDlYRzR1Y21OM0xXMWtjMklnTG5KamR5MXRaSE5pTFdOaFludG1iMjUwTFhOcGVtVTZNVEZ3ZUR0bWIyNTBMWGRsYVdkb2REbzRNREE3WW05eVpHVnlMWEpoWkdsMWN6bzVPVGx3ZUR0d1lXUmthVzVuT2pOd2VDQTVjSGg5WEc0dWNtTjNMVzFrYzJJZ0xuSmpkeTF0WkhOaUxYTm5jbWxrZTJScGMzQnNZWGs2WjNKcFpEdG5jbWxrTFhSbGJYQnNZWFJsTFdOdmJIVnRibk02Y21Wd1pXRjBLRElzYldsdWJXRjRLREFzTVdaeUtTazdaMkZ3T2pod2VDQXhPSEI0ZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMXpjbTkzZTIxcGJpMTNhV1IwYURvd2ZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTF6YkdGaWUyUnBjM0JzWVhrNlpteGxlRHRxZFhOMGFXWjVMV052Ym5SbGJuUTZjM0JoWTJVdFltVjBkMlZsYmp0bWIyNTBMWE5wZW1VNk1URXVOWEI0TzJadmJuUXRkMlZwWjJoME9qY3dNRHRqYjJ4dmNqb2pNMFExTkRVMk8yMWhjbWRwYmpvd0lEQWdNM0I0ZlZ4dUxuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMXpiR0ZpSUdKN1kyOXNiM0k2SXpBd016Y3pSSDFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdGMzUnlZV05yZTJobGFXZG9kRG8yY0hnN1ltOXlaR1Z5TFhKaFpHbDFjem81T1Rsd2VEdGlZV05yWjNKdmRXNWtPaU5GUkVZeFJqRTdiM1psY21ac2IzYzZhR2xrWkdWdWZWeHVMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTF6Wm1sc2JIdG9aV2xuYUhRNk1UQXdKVHRpYjNKa1pYSXRjbUZrYVhWek9qazVPWEI0TzJKaFkydG5jbTkxYm1RNkl6QXdSVEEzTUgxY2JpNXlZM2N0YldSellpQXVjbU4zTFcxa2MySXRjMlpwYkd3dGFHbDdZbUZqYTJkeWIzVnVaRG9qTURCQk9EVkJmVnh1TG5KamR5MXRaSE5pSUM1eVkzY3RiV1J6WWkxelptbHNiQzFzYjN0aVlXTnJaM0p2ZFc1a09pTkNORFUxTWtSOVhHNHVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMV051YjI1bGUyMWhjbWRwYmpvd08yWnZiblF0YzJsNlpUb3hNaTQxY0hnN1kyOXNiM0k2SXpjek9FRTRRMzFjYmk1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdFkyaHBiblI3YldGeVoybHVPakV3Y0hnZ01DQXdPMlp2Ym5RdGMybDZaVG94TVM0MWNIZzdZMjlzYjNJNkl6bEdRakJDTVgxY2JseHVRRzFsWkdsaElDaHRZWGd0ZDJsa2RHZzZOVFl3Y0hncGUxeHVJQ0F1Y21OM0xXMWtjMko3Y0dGa1pHbHVaem94Tm5CNGZWeHVJQ0F1Y21OM0xXMWtjMklnTG5KamR5MXRaSE5pTFhOc2IzUjdkMmxrZEdnNk5USndlSDFjYmlBZ0xuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMW1ZV05sTEM1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdGFXNXBkQ3d1Y21OM0xXMWtjMklnTG5KamR5MXRaSE5pTFdaaFkyVjNjbUZ3ZTNkcFpIUm9PalF3Y0hnN2FHVnBaMmgwT2pRd2NIaDlYRzRnSUM1eVkzY3RiV1J6WWlBdWNtTjNMVzFrYzJJdFpXMXdkSGxqZTNkcFpIUm9Pak00Y0hnN2FHVnBaMmgwT2pNNGNIZzdabTl1ZEMxemFYcGxPamt1TlhCNGZWeHVJQ0F1Y21OM0xXMWtjMklnTG5KamR5MXRaSE5pTFhOdVlXMWxlMjFoZUMxM2FXUjBhRG8xTkhCNE8yWnZiblF0YzJsNlpUbzVMalZ3ZUgxY2JpQWdMbkpqZHkxdFpITmlJQzV5WTNjdGJXUnpZaTFpZEc1N1pteGxlRG94SURFZ01UQXdKWDFjYmlBZ0xuSmpkeTF0WkhOaUlDNXlZM2N0YldSellpMXpaM0pwWkh0bmNtbGtMWFJsYlhCc1lYUmxMV052YkhWdGJuTTZNV1p5ZlZ4dUlDQXVjbU4zTFcxa2MySWdMbkpqZHkxdFpITmlMWFJ6Wld4N2JXRjRMWGRwWkhSb09qRXdNQ1U3Wm14bGVEb3hJREVnTVRBd0pYMWNibjFjYmlJN2RtRnlJR005Wkc5amRXMWxiblF1WTNWeWNtVnVkRk5qY21sd2REc29ZeVltWXk1d1lYSmxiblJPYjJSbFAyTXVjR0Z5Wlc1MFRtOWtaVHBrYjJOMWJXVnVkQzVvWldGa0tTNWhjSEJsYm1SRGFHbHNaQ2h6S1R0OUtTZ3BPdz09IiksZnVuY3Rpb24oYyl7cmV0dXJuIGMuY2hhckNvZGVBdCgwKX0pKSk=\"),function(c){return c.charCodeAt(0)})))<\/script>\n\n<h2 class=\"rcw-mdsb-title\">Madden NFL 27 Squad Builder<\/h2>\n<p class=\"rcw-mdsb-sub\">Pick a personnel grouping, tap a slot and fill it from the full 3,111-player launch database. Every player shows the attributes that actually matter at their position.<\/p>\n\n<div class=\"rcw-mdsb-bar\">\n  <span class=\"rcw-mdsb-selwrap\"><select class=\"rcw-mdsb-sel\" aria-label=\"Personnel grouping\"><\/select><\/span>\n  <button type=\"button\" class=\"rcw-mdsb-btn\" data-act=\"fill\">Auto-fill best<\/button>\n  <button type=\"button\" class=\"rcw-mdsb-btn\" data-act=\"copy\">Copy lineup<\/button>\n  <button type=\"button\" class=\"rcw-mdsb-btn\" data-act=\"reset\">Reset lineup<\/button>\n<\/div>\n\n<p class=\"rcw-mdsb-note\" hidden><\/p>\n\n<div class=\"rcw-mdsb-stats\">\n  <div class=\"rcw-mdsb-stat\"><p class=\"rcw-mdsb-sk\">Avg OVR<\/p><p class=\"rcw-mdsb-sv\" data-stat=\"rating\">\u2014<\/p><\/div>\n  <div class=\"rcw-mdsb-stat\"><p class=\"rcw-mdsb-sk\">Filled<\/p><p class=\"rcw-mdsb-sv\" data-stat=\"count\">0\/11<\/p><\/div>\n  <div class=\"rcw-mdsb-stat\"><p class=\"rcw-mdsb-sk\">Star power<\/p><p class=\"rcw-mdsb-sv\" data-stat=\"stars\">0<\/p><\/div>\n  <div class=\"rcw-mdsb-stat\"><p class=\"rcw-mdsb-sk\">Out of position<\/p><p class=\"rcw-mdsb-sv\" data-stat=\"oop\">0<\/p><\/div>\n<\/div>\n\n<div class=\"rcw-mdsb-field\">\n  <div class=\"rcw-mdsb-turf\"><\/div>\n  <div class=\"rcw-mdsb-ez rcw-mdsb-ez-t\"><span class=\"rcw-mdsb-ezt\">End zone<\/span><\/div>\n  <div class=\"rcw-mdsb-ez rcw-mdsb-ez-b\"><span class=\"rcw-mdsb-ezt\">End zone<\/span><\/div>\n  <div class=\"rcw-mdsb-lines\"><\/div>\n  <div class=\"rcw-mdsb-slots\"><\/div>\n<\/div>\n\n<div class=\"rcw-mdsb-card\" hidden><\/div>\n\n<p class=\"rcw-mdsb-foot\">Ratings: EA SPORTS Madden NFL 27 launch ratings, pulled <span class=\"rcw-mdsb-upd\"><\/span>. Built by Recharge.com \u2014 we are not affiliated with EA or the NFL.<\/p>\n\n<div class=\"rcw-mdsb-backdrop\"><\/div>\n<div class=\"rcw-mdsb-panel\" role=\"dialog\" aria-modal=\"true\">\n  <div class=\"rcw-mdsb-phead\">\n    <h3 class=\"rcw-mdsb-ptitle\">Pick a player<\/h3>\n    <button type=\"button\" class=\"rcw-mdsb-x\" aria-label=\"Close\">&#215;<\/button>\n  <\/div>\n  <div class=\"rcw-mdsb-ptools\">\n    <input type=\"text\" class=\"rcw-mdsb-search\" placeholder=\"Search by name\u2026\" aria-label=\"Search players\">\n    <select class=\"rcw-mdsb-tsel\" aria-label=\"Filter by team\"><\/select>\n    <button type=\"button\" class=\"rcw-mdsb-tog\" aria-pressed=\"false\">All positions<\/button>\n  <\/div>\n  <div class=\"rcw-mdsb-plist\"><\/div>\n  <div class=\"rcw-mdsb-pfoot\"><button type=\"button\" class=\"rcw-mdsb-rem\">Remove from lineup<\/button><\/div>\n<\/div>\n<\/div>\n<script>eval(new TextDecoder().decode(Uint8Array.from(atob(\"CihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKLyogQ2FwdHVyZSBkYXRlIG9mIHRoZSBzaGFyZHMgYmVsb3cuIFByaW50ZWQgaW4gdGhlIGZvb3RlciBpbW1lZGlhdGVseSwgc28gYSBmaXJzdC10aW1lIHZpc2l0b3IKICAgd2hvIG5ldmVyIG9wZW5zIHRoZSBwaWNrZXIgc3RpbGwgc2VlcyB3aGVuIHRoZSByYXRpbmdzIHdlcmUgcHVsbGVkLiBLZWVwIGluIHN0ZXAgd2l0aCB0aGUKICAgc2hhcmRzIHdoZW5ldmVyIHRoZSBkYXRhIGlzIHJlLXNjcmFwZWQuICovCnZhciBSQ1dfQ0FQVFVSRUQgPSAnMjAyNi0wOS0xNCc7CnZhciBSQ1dfU1JDID0gewogIHRvcDogWwogICAgJ2h0dHBzOi8vY3JlYXRpdmVncm91cC1ibG9nLXByZC1ldS13ZXN0LTEtcmVjaGFyZ2UtYmxvZy5zMy5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA5LzE0MTEwODIxL3Jjdy1tZC10b3AtcDEtNC50eHQnCiAgXSwKICByZXN0OiBbCiAgICAnaHR0cHM6Ly9jcmVhdGl2ZWdyb3VwLWJsb2ctcHJkLWV1LXdlc3QtMS1yZWNoYXJnZS1ibG9nLnMzLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tL2Jsb2cvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDkvMTQxMTA4MjUvcmN3LW1kLXJlc3QtcDEtMS0zLnR4dCcsCiAgICAnaHR0cHM6Ly9jcmVhdGl2ZWdyb3VwLWJsb2ctcHJkLWV1LXdlc3QtMS1yZWNoYXJnZS1ibG9nLnMzLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tL2Jsb2cvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDkvMTQxMTA4MjcvcmN3LW1kLXJlc3QtcDItMi0xLnR4dCcsCiAgICAnaHR0cHM6Ly9jcmVhdGl2ZWdyb3VwLWJsb2ctcHJkLWV1LXdlc3QtMS1yZWNoYXJnZS1ibG9nLnMzLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tL2Jsb2cvd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDkvMTQxMTA4MjkvcmN3LW1kLXJlc3QtcDMtMi50eHQnCiAgXQp9OwpmdW5jdGlvbiByY3dGZXRjaEpzb24odXJsKXsKICByZXR1cm4gZmV0Y2godXJsKS50aGVuKGZ1bmN0aW9uKHIpewogICAgaWYgKCFyLm9rKSB0aHJvdyBuZXcgRXJyb3IoJ0hUVFAgJyArIHIuc3RhdHVzKTsKICAgIHJldHVybiByLnRleHQoKTsKICB9KS50aGVuKGZ1bmN0aW9uKHQpeyByZXR1cm4gSlNPTi5wYXJzZSh0LnNsaWNlKHQuaW5kZXhPZignXG4nKSArIDEpKTsgfSk7Cn0KZnVuY3Rpb24gcmN3TG9hZFNldCh1cmxzKXsKICByZXR1cm4gUHJvbWlzZS5hbGwodXJscy5tYXAocmN3RmV0Y2hKc29uKSkudGhlbihmdW5jdGlvbihwYXJ0cyl7CiAgICB2YXIgb3V0ID0gcGFydHNbMF0sIGk7CiAgICBmb3IgKGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspewogICAgICBvdXQucGxheWVycyA9IG91dC5wbGF5ZXJzLmNvbmNhdChwYXJ0c1tpXS5wbGF5ZXJzKTsKICAgICAgT2JqZWN0LmFzc2lnbihvdXQudGVhbXMsIHBhcnRzW2ldLnRlYW1zKTsKICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfSk7Cn0KCiAgLyogLS0tLSBwZXJzb25uZWwgZ3JvdXBpbmdzOiBbcm9sZSwgeCUsIHklXSAtLS0tICovCiAgdmFyIEZPUk1BVElPTlMgPSB7CiAgICAnT2ZmZW5zZSDigJQgU2luZ2xlYmFjayc6IFtbJ1FCJyw1MCw3NF0sWydIQicsNTAsNjRdLFsnV1InLDksNTJdLFsnV1InLDIxLDUyXSxbJ1dSJyw5MSw1Ml0sWydURScsNzgsNTVdLFsnTFQnLDMxLDU1XSxbJ0xHJyw0MCw1NV0sWydDJyw1MCw1NV0sWydSRycsNjAsNTVdLFsnUlQnLDY5LDU1XV0sCiAgICAnT2ZmZW5zZSDigJQgSS1Gb3JtJzogW1snUUInLDUwLDc2XSxbJ0ZCJyw1MCw2OF0sWydIQicsNTAsNjFdLFsnV1InLDksNTJdLFsnV1InLDkxLDUyXSxbJ1RFJyw3OCw1NV0sWydMVCcsMzEsNTVdLFsnTEcnLDQwLDU1XSxbJ0MnLDUwLDU1XSxbJ1JHJyw2MCw1NV0sWydSVCcsNjksNTVdXSwKICAgICdPZmZlbnNlIOKAlCBTaG90Z3VuIDRXUic6IFtbJ1FCJyw1MCw3Nl0sWydIQicsNjMsNzBdLFsnV1InLDcsNTJdLFsnV1InLDIwLDUyXSxbJ1dSJyw4MCw1Ml0sWydXUicsOTMsNTJdLFsnTFQnLDMxLDU1XSxbJ0xHJyw0MCw1NV0sWydDJyw1MCw1NV0sWydSRycsNjAsNTVdLFsnUlQnLDY5LDU1XV0sCiAgICAnT2ZmZW5zZSDigJQgUGlzdG9sJzogW1snUUInLDUwLDcyXSxbJ0hCJyw1MCw2NF0sWydXUicsOSw1Ml0sWydXUicsMjEsNTJdLFsnV1InLDkxLDUyXSxbJ1RFJyw3OCw1NV0sWydMVCcsMzEsNTVdLFsnTEcnLDQwLDU1XSxbJ0MnLDUwLDU1XSxbJ1JHJyw2MCw1NV0sWydSVCcsNjksNTVdXSwKICAgICdPZmZlbnNlIOKAlCBHb2FsIExpbmUnOiBbWydRQicsNTAsNzZdLFsnRkInLDUwLDY4XSxbJ0hCJyw1MCw2MV0sWydURScsMjIsNTVdLFsnVEUnLDc4LDU1XSxbJ1RFJyw4Nyw1NV0sWydMVCcsMzEsNTVdLFsnTEcnLDQwLDU1XSxbJ0MnLDUwLDU1XSxbJ1JHJyw2MCw1NV0sWydSVCcsNjksNTVdXSwKICAgICdEZWZlbnNlIOKAlCA0LTMnOiBbWydMRURHJywyNyw0Ml0sWydEVCcsNDIsNDJdLFsnRFQnLDU4LDQyXSxbJ1JFREcnLDczLDQyXSxbJ1dJTEwnLDI5LDMwXSxbJ01JS0UnLDUwLDMwXSxbJ1NBTScsNzEsMzBdLFsnQ0InLDgsNDBdLFsnQ0InLDkyLDQwXSxbJ0ZTJywzOCwxNl0sWydTUycsNjIsMTZdXSwKICAgICdEZWZlbnNlIOKAlCBOaWNrZWwnOiBbWydMRURHJywyNyw0Ml0sWydEVCcsNDIsNDJdLFsnRFQnLDU4LDQyXSxbJ1JFREcnLDczLDQyXSxbJ1dJTEwnLDM0LDMwXSxbJ01JS0UnLDYwLDMwXSxbJ0NCJyw4LDQwXSxbJ0NCJyw5Miw0MF0sWydDQicsMTksMzNdLFsnRlMnLDQwLDE2XSxbJ1NTJyw2MywxNl1dLAogICAgJ0RlZmVuc2Ug4oCUIERpbWUnOiBbWydMRURHJywyNyw0Ml0sWydEVCcsNDIsNDJdLFsnRFQnLDU4LDQyXSxbJ1JFREcnLDczLDQyXSxbJ01JS0UnLDUwLDMwXSxbJ0NCJyw4LDQwXSxbJ0NCJyw5Miw0MF0sWydDQicsMTksMzNdLFsnQ0InLDgxLDMzXSxbJ0ZTJywzOCwxNl0sWydTUycsNjIsMTZdXSwKICAgICdTcGVjaWFsIFRlYW1zJzogW1snSycsNTAsNThdLFsnTFMnLDUwLDUwXSxbJ1AnLDUwLDY2XSxbJ1dSJywxOCw0MF0sWydXUicsODIsNDBdLFsnSEInLDM0LDQ0XSxbJ0NCJywxMCwzNF0sWydDQicsOTAsMzRdLFsnRlMnLDMwLDIyXSxbJ1NTJyw3MCwyMl0sWydNSUtFJyw1MCwzMF1dCiAgfTsKICAvKiBBIHNsb3QgYWNjZXB0cyBpdHMgb3duIGNvZGUgZmlyc3QsIHRoZW4gY2xvc2UgY291c2lucyAoZWRnZSBydXNoZXJzIGZsaXAgc2lkZXMsCiAgICAgbGluZWJhY2tlcnMgcm90YXRlLCBndWFyZHMvdGFja2xlcyBtaXJyb3IpLiBFdmVyeXRoaW5nIGVsc2UgaXMgZXhhY3QtbWF0Y2guICovCiAgdmFyIENPTVBBVCA9IHsKICAgICdMRURHJzogWydMRURHJywnUkVERyddLCAnUkVERyc6IFsnUkVERycsJ0xFREcnXSwKICAgICdNSUtFJzogWydNSUtFJywnV0lMTCcsJ1NBTSddLCAnV0lMTCc6IFsnV0lMTCcsJ01JS0UnLCdTQU0nXSwgJ1NBTSc6IFsnU0FNJywnV0lMTCcsJ01JS0UnXSwKICAgICdGUyc6IFsnRlMnLCdTUyddLCAnU1MnOiBbJ1NTJywnRlMnXSwKICAgICdMRyc6IFsnTEcnLCdSRyddLCAnUkcnOiBbJ1JHJywnTEcnXSwgJ0xUJzogWydMVCcsJ1JUJ10sICdSVCc6IFsnUlQnLCdMVCddLAogICAgJ0ZCJzogWydGQicsJ0hCJ10KICB9OwogIGZ1bmN0aW9uIGNvZGVzRm9yKHJvbGUpeyByZXR1cm4gQ09NUEFUW3JvbGVdIHx8IFtyb2xlXTsgfQogIC8qIFdoZXJlIHRoZSBsaW5lIG9mIHNjcmltbWFnZSBzaXRzIGZvciBlYWNoIGdyb3VwaW5nLCBhcyBhICUgZnJvbSB0aGUgdG9wLiAqLwogIGZ1bmN0aW9uIGxvc0ZvcihmKXsgcmV0dXJuIGYuaW5kZXhPZignRGVmZW5zZScpID09PSAwID8gNDcgOiAoZiA9PT0gJ1NwZWNpYWwgVGVhbXMnID8gNDYgOiA1MCk7IH0KCiAgLyogUHJldHR5IGxhYmVscyBmb3IgRUEncyBjYW1lbENhc2UgYXR0cmlidXRlIGtleXMuIEFueXRoaW5nIG5vdCBsaXN0ZWQgaXMgZGUtY2FtZWxpc2VkLiAqLwogIHZhciBTVEFUX0xBQkVMID0gewogICAgdGhyb3dBY2N1cmFjeVNob3J0OiAnU2hvcnQgYWNjdXJhY3knLCB0aHJvd0FjY3VyYWN5TWlkOiAnTWlkIGFjY3VyYWN5JywKICAgIHRocm93QWNjdXJhY3lEZWVwOiAnRGVlcCBhY2N1cmFjeScsIHRocm93T25UaGVSdW46ICdUaHJvdyBvbiBydW4nLAogICAgdGhyb3dVbmRlclByZXNzdXJlOiAnVW5kZXIgcHJlc3N1cmUnLCB0aHJvd1Bvd2VyOiAnVGhyb3cgcG93ZXInLCBwbGF5QWN0aW9uOiAnUGxheSBhY3Rpb24nLAogICAgYnJlYWtUYWNrbGU6ICdCcmVhayB0YWNrbGUnLCBicmVha1NhY2s6ICdCcmVhayBzYWNrJywgYkNWaXNpb246ICdCQyB2aXNpb24nLAogICAgc3RpZmZBcm06ICdTdGlmZiBhcm0nLCBqdWtlTW92ZTogJ0p1a2UnLCBzcGluTW92ZTogJ1NwaW4nLCBraWNrUmV0dXJuOiAnS2ljayByZXR1cm4nLAogICAgZGVlcFJvdXRlUnVubmluZzogJ0RlZXAgcm91dGVzJywgbWVkaXVtUm91dGVSdW5uaW5nOiAnTWVkaXVtIHJvdXRlcycsCiAgICBzaG9ydFJvdXRlUnVubmluZzogJ1Nob3J0IHJvdXRlcycsIGNhdGNoSW5UcmFmZmljOiAnQ2F0Y2ggaW4gdHJhZmZpYycsCiAgICBzcGVjdGFjdWxhckNhdGNoOiAnU3BlY3RhY3VsYXIgY2F0Y2gnLCBwYXNzQmxvY2s6ICdQYXNzIGJsb2NrJywKICAgIHBhc3NCbG9ja1Bvd2VyOiAnUGFzcyBibG9jayBwb3dlcicsIHBhc3NCbG9ja0ZpbmVzc2U6ICdQYXNzIGJsb2NrIGZpbmVzc2UnLAogICAgcnVuQmxvY2s6ICdSdW4gYmxvY2snLCBydW5CbG9ja1Bvd2VyOiAnUnVuIGJsb2NrIHBvd2VyJywKICAgIHJ1bkJsb2NrRmluZXNzZTogJ1J1biBibG9jayBmaW5lc3NlJywgbGVhZEJsb2NrOiAnTGVhZCBibG9jaycsCiAgICBpbXBhY3RCbG9ja2luZzogJ0ltcGFjdCBibG9ja2luZycsIGJsb2NrU2hlZGRpbmc6ICdCbG9jayBzaGVkZGluZycsCiAgICBwb3dlck1vdmVzOiAnUG93ZXIgbW92ZXMnLCBmaW5lc3NlTW92ZXM6ICdGaW5lc3NlIG1vdmVzJywgaGl0UG93ZXI6ICdIaXQgcG93ZXInLAogICAgcGxheVJlY29nbml0aW9uOiAnUGxheSByZWNvZ25pdGlvbicsIG1hbkNvdmVyYWdlOiAnTWFuIGNvdmVyYWdlJywKICAgIHpvbmVDb3ZlcmFnZTogJ1pvbmUgY292ZXJhZ2UnLCBraWNrUG93ZXI6ICdLaWNrIHBvd2VyJywga2lja0FjY3VyYWN5OiAnS2ljayBhY2N1cmFjeScsCiAgICBjaGFuZ2VPZkRpcmVjdGlvbjogJ0NoYW5nZSBvZiBkaXJlY3Rpb24nCiAgfTsKICBmdW5jdGlvbiBzdGF0TGFiZWwoayl7CiAgICBpZiAoU1RBVF9MQUJFTFtrXSkgcmV0dXJuIFNUQVRfTEFCRUxba107CiAgICB2YXIgcyA9IGsucmVwbGFjZSgvKFtBLVpdKS9nLCAnICQxJykudG9Mb3dlckNhc2UoKTsKICAgIHJldHVybiBzLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKTsKICB9CgogIGZ1bmN0aW9uIG5vcm0ocyl7CiAgICBzID0gU3RyaW5nKHMgPT0gbnVsbCA\/ICcnIDogcykudG9Mb3dlckNhc2UoKTsKICAgIHRyeSB7IHMgPSBzLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW8yALc2vXS9nLCAnJyk7IH0gY2F0Y2ggKGUpIHt9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9bXmEtejAtOV0vZywgJycpOwogIH0KICBmdW5jdGlvbiBzaG9ydE5hbWUobil7CiAgICB2YXIgdCA9IFN0cmluZyhuID09IG51bGwgPyAnJyA6IG4pLnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICBpZiAodC5sZW5ndGggPCAyKSByZXR1cm4gdFswXSB8fCAnJzsKICAgIHZhciBsYXN0ID0gdFt0Lmxlbmd0aCAtIDFdOwogICAgaWYgKC9eKGpyXC4\/fHNyXC4\/fGlpfGlpaXxpdnx2KSQvaS50ZXN0KGxhc3QpKXsKICAgICAgaWYgKHQubGVuZ3RoID09PSAyKSByZXR1cm4gdC5qb2luKCcgJyk7CiAgICAgIHJldHVybiB0W3QubGVuZ3RoIC0gMl0gKyAnICcgKyBsYXN0OwogICAgfQogICAgcmV0dXJuIGxhc3Q7CiAgfQogIGZ1bmN0aW9uIGluaXRpYWxzKG4pewogICAgdmFyIHQgPSBTdHJpbmcobiA9PSBudWxsID8gJycgOiBuKS50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgcmV0dXJuICgodFswXSA\/IHRbMF0uY2hhckF0KDApIDogJycpICsgKHQubGVuZ3RoID4gMSA\/IHRbdC5sZW5ndGggLSAxXS5jaGFyQXQoMCkgOiAnJykpLnRvVXBwZXJDYXNlKCk7CiAgfQogIGZ1bmN0aW9uIGluUG9zKHAsIHJvbGUpewogICAgdmFyIGNvZGVzID0gY29kZXNGb3Iocm9sZSksIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgY29kZXMubGVuZ3RoOyBpKyspeyBpZiAocC5wID09PSBjb2Rlc1tpXSkgcmV0dXJuIHRydWU7IH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgZnVuY3Rpb24gcG9vbEZvcihwbGF5ZXJzLCByb2xlLCBhbGwsIHEsIHRlYW0pewogICAgdmFyIEEgPSBbXSwgQiA9IFtdLCBpLCBwLCBjb2RlcyA9IGNvZGVzRm9yKHJvbGUpOwogICAgZm9yIChpID0gMDsgaSA8IHBsYXllcnMubGVuZ3RoOyBpKyspewogICAgICBwID0gcGxheWVyc1tpXTsKICAgICAgaWYgKHEgJiYgcC5fcy5pbmRleE9mKHEpID09PSAtMSkgY29udGludWU7CiAgICAgIGlmICh0ZWFtID09PSAnRkEnKXsgaWYgKHAudCAhPT0gbnVsbCAmJiBwLnQgIT09IHVuZGVmaW5lZCkgY29udGludWU7IH0KICAgICAgZWxzZSBpZiAodGVhbSAmJiBTdHJpbmcocC50KSAhPT0gdGVhbSkgY29udGludWU7CiAgICAgIGlmIChhbGwpeyBBLnB1c2gocCk7IGNvbnRpbnVlOyB9CiAgICAgIGlmIChwLnAgPT09IGNvZGVzWzBdKXsgQS5wdXNoKHApOyBjb250aW51ZTsgfQogICAgICBpZiAoY29kZXMuaW5kZXhPZihwLnApICE9PSAtMSkgQi5wdXNoKHApOwogICAgfQogICAgcmV0dXJuIEEuY29uY2F0KEIpOwogIH0KICBmdW5jdGlvbiB0aWVyQ2xhc3Mobyl7CiAgICByZXR1cm4gbyA+PSA5MCA\/ICdyY3ctbWRzYi10MScgOiBvID49IDg0ID8gJ3Jjdy1tZHNiLXQyJyA6IG8gPj0gNzggPyAncmN3LW1kc2ItdDMnIDogbyA+PSA3MCA\/ICdyY3ctbWRzYi10NCcgOiAncmN3LW1kc2ItdDUnOwogIH0KICBmdW5jdGlvbiBzdGFyQ291bnQocCl7CiAgICByZXR1cm4gKHAueCA\/IHAueC5sZW5ndGggOiAwKSArIChwLnMgPyBwLnMubGVuZ3RoIDogMCk7CiAgfQogIGZ1bmN0aW9uIGxpbmV1cFN1bW1hcnkoZW50cmllcyl7CiAgICB2YXIgb3ZyID0gMCwgb29wID0gMCwgc3RhcnMgPSAwLCBwZXIgPSBbXSwgaSwgb2s7CiAgICBmb3IgKGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKyl7CiAgICAgIG92ciArPSBlbnRyaWVzW2ldLnAubzsKICAgICAgc3RhcnMgKz0gc3RhckNvdW50KGVudHJpZXNbaV0ucCk7CiAgICAgIG9rID0gaW5Qb3MoZW50cmllc1tpXS5wLCBlbnRyaWVzW2ldLnJvbGUpOwogICAgICBwZXIucHVzaCghb2spOwogICAgICBpZiAoIW9rKSBvb3ArKzsKICAgIH0KICAgIHJldHVybiB7IHBlcjogcGVyLCBvb3A6IG9vcCwgc3RhcnM6IHN0YXJzLCBhdmc6IGVudHJpZXMubGVuZ3RoID8gb3ZyIC8gZW50cmllcy5sZW5ndGggOiAwIH07CiAgfQoKICAvKiAtLS0tIG5vZGUgdGVzdCBob29rIChubyB3aW5kb3cgPSB0ZXN0IHJ1bm5lcikgLS0tLSAqLwogIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyl7CiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpewogICAgICBtb2R1bGUuZXhwb3J0cyA9IHsgUkNXX1NSQzogUkNXX1NSQywgUkNXX0NBUFRVUkVEOiBSQ1dfQ0FQVFVSRUQsIEZPUk1BVElPTlM6IEZPUk1BVElPTlMsCiAgICAgICAgQ09NUEFUOiBDT01QQVQsIG5vcm06IG5vcm0sIHNob3J0TmFtZTogc2hvcnROYW1lLCBpbml0aWFsczogaW5pdGlhbHMsIGluUG9zOiBpblBvcywKICAgICAgICBwb29sRm9yOiBwb29sRm9yLCB0aWVyQ2xhc3M6IHRpZXJDbGFzcywgbGluZXVwU3VtbWFyeTogbGluZXVwU3VtbWFyeSwgc3RhckNvdW50OiBzdGFyQ291bnQsCiAgICAgICAgc3RhdExhYmVsOiBzdGF0TGFiZWwsIGxvc0ZvcjogbG9zRm9yIH07CiAgICB9CiAgICByZXR1cm47CiAgfQoKICB2YXIgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyY3ctbWRzYicpOwogIGlmICghcm9vdCkgcmV0dXJuOwoKICB2YXIgREVGQVVMVF9GID0gJ09mZmVuc2Ug4oCUIFNpbmdsZWJhY2snOwogIHZhciBzdGF0ZSA9IHsgZm9ybWF0aW9uOiBERUZBVUxUX0YsIHNsb3RzOiBbXSwgZGF0YTogbnVsbCwgYnlJZDoge30sIGxvYWRpbmc6IGZhbHNlLAogICAgICAgICAgICAgICAgbG9hZEVycm9yOiBmYWxzZSwgcGVuZGluZzogbnVsbCwgcGlja0luZGV4OiAtMSwgYWxsUG9zOiBmYWxzZSwgcXVlcnk6ICcnLAogICAgICAgICAgICAgICAgdGVhbTogJycsIHNlbGVjdGVkOiAtMSB9OwoKICBmdW5jdGlvbiBxKHNlbCl7IHJldHVybiByb290LnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfQogIHZhciBzZWxFbCA9IHEoJy5yY3ctbWRzYi1zZWwnKSwgc2xvdHNFbCA9IHEoJy5yY3ctbWRzYi1zbG90cycpLCBsaW5lc0VsID0gcSgnLnJjdy1tZHNiLWxpbmVzJyksCiAgICAgIGZpZWxkRWwgPSBxKCcucmN3LW1kc2ItZmllbGQnKSwgbm90ZUVsID0gcSgnLnJjdy1tZHNiLW5vdGUnKSwgY2FyZEVsID0gcSgnLnJjdy1tZHNiLWNhcmQnKSwKICAgICAgc3RhdFIgPSBxKCdbZGF0YS1zdGF0PSJyYXRpbmciXScpLCBzdGF0TiA9IHEoJ1tkYXRhLXN0YXQ9ImNvdW50Il0nKSwKICAgICAgc3RhdFMgPSBxKCdbZGF0YS1zdGF0PSJzdGFycyJdJyksIHN0YXRPID0gcSgnW2RhdGEtc3RhdD0ib29wIl0nKSwKICAgICAgcmVzZXRCdG4gPSBxKCdbZGF0YS1hY3Q9InJlc2V0Il0nKSwgY29weUJ0biA9IHEoJ1tkYXRhLWFjdD0iY29weSJdJyksCiAgICAgIGZpbGxCdG4gPSBxKCdbZGF0YS1hY3Q9ImZpbGwiXScpLAogICAgICBwYW5lbFRpdGxlID0gcSgnLnJjdy1tZHNiLXB0aXRsZScpLCByZW1vdmVCdG4gPSBxKCcucmN3LW1kc2ItcmVtJyksIGNsb3NlQnRuID0gcSgnLnJjdy1tZHNiLXgnKSwKICAgICAgc2VhcmNoRWwgPSBxKCcucmN3LW1kc2Itc2VhcmNoJyksIHRvZ0VsID0gcSgnLnJjdy1tZHNiLXRvZycpLCBsaXN0RWwgPSBxKCcucmN3LW1kc2ItcGxpc3QnKSwKICAgICAgdGVhbUVsID0gcSgnLnJjdy1tZHNiLXRzZWwnKSwKICAgICAgYmFja2Ryb3AgPSBxKCcucmN3LW1kc2ItYmFja2Ryb3AnKSwgdXBkRWwgPSBxKCcucmN3LW1kc2ItdXBkJyk7CgogIC8qIFdvcmRQcmVzcyBzdHJpcHMgcmF3IDxvcHRpb24+LCBzbyBldmVyeSBkcm9wZG93biBpcyBidWlsdCBoZXJlIGF0IHJ1bnRpbWUuICovCiAgKGZ1bmN0aW9uKCl7CiAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgbmFtZSwgbzsKICAgIGZvciAobmFtZSBpbiBGT1JNQVRJT05TKSB7CiAgICAgIGlmICghRk9STUFUSU9OUy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgY29udGludWU7CiAgICAgIG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKICAgICAgby52YWx1ZSA9IG5hbWU7IG8udGV4dENvbnRlbnQgPSBuYW1lOwogICAgICBmcmFnLmFwcGVuZENoaWxkKG8pOwogICAgfQogICAgc2VsRWwuYXBwZW5kQ2hpbGQoZnJhZyk7CiAgfSkoKTsKCiAgLyogeWFyZCBsaW5lcyBldmVyeSAxMCB5YXJkcyBiZXR3ZWVuIHRoZSBlbmQgem9uZXMsIHdpdGggbnVtYmVycyBkb3duIGVhY2ggc2lkZSAqLwogIChmdW5jdGlvbigpewogICAgdmFyIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGksIGQsIG47CiAgICBmb3IgKGkgPSAwOyBpIDw9IDEwOyBpKyspewogICAgICBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICBkLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1sbicgKyAoaSAlIDUgPT09IDAgPyAnJyA6ICcgcmN3LW1kc2ItbG41Jyk7CiAgICAgIGQuc3R5bGUudG9wID0gKGkgKiAxMCkgKyAnJSc7CiAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoZCk7CiAgICAgIGlmIChpID4gMCAmJiBpIDwgMTApewogICAgICAgIG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgICAgbi5jbGFzc05hbWUgPSAncmN3LW1kc2ItbnVtJzsKICAgICAgICBuLnN0eWxlLnRvcCA9IChpICogMTApICsgJyUnOwogICAgICAgIG4uc3R5bGUubGVmdCA9ICczJSc7CiAgICAgICAgbi5zdHlsZS5tYXJnaW5Ub3AgPSAnLTZweCc7CiAgICAgICAgbi50ZXh0Q29udGVudCA9IFN0cmluZyhpIDw9IDUgPyBpICogMTAgOiAoMTAgLSBpKSAqIDEwKTsKICAgICAgICBmcmFnLmFwcGVuZENoaWxkKG4pOwogICAgICB9CiAgICB9CiAgICBsaW5lc0VsLmFwcGVuZENoaWxkKGZyYWcpOwogIH0pKCk7CgogIHZhciBsb3NFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKICBsb3NFbC5jbGFzc05hbWUgPSAncmN3LW1kc2ItbG9zJzsKICB2YXIgbG9zVCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKICBsb3NULmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1sb3N0JzsKICBsb3NULnRleHRDb250ZW50ID0gJ0xpbmUgb2Ygc2NyaW1tYWdlJzsKICBmaWVsZEVsLmFwcGVuZENoaWxkKGxvc0VsKTsKICBmaWVsZEVsLmFwcGVuZENoaWxkKGxvc1QpOwoKICB2YXIgQVZDT0xPUlMgPSBbJyMwMDM3M0QnLCAnIzFFOENCRScsICcjMEY3NjZFJywgJyM3QzVDRDYnLCAnI0I0NTUyRCcsICcjNUE2QjZEJ107CgogIGZ1bmN0aW9uIGJ1aWxkU2xvdHMoZil7CiAgICB2YXIgZGVmID0gRk9STUFUSU9OU1tmXSwgb3V0ID0gW10sIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZGVmLmxlbmd0aDsgaSsrKSBvdXQucHVzaCh7IHJvbGU6IGRlZltpXVswXSwgeDogZGVmW2ldWzFdLCB5OiBkZWZbaV1bMl0sIHBsYXllcjogbnVsbCB9KTsKICAgIHJldHVybiBvdXQ7CiAgfQogIGZ1bmN0aW9uIHNhdmUoKXsKICAgIGlmIChzdGF0ZS5wZW5kaW5nKSByZXR1cm47CiAgICB0cnkgewogICAgICB2YXIgaWRzID0gW10sIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBzdGF0ZS5zbG90cy5sZW5ndGg7IGkrKykgaWRzLnB1c2goc3RhdGUuc2xvdHNbaV0ucGxheWVyID8gc3RhdGUuc2xvdHNbaV0ucGxheWVyLmlkIDogMCk7CiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdyY3ctbWRzYicsIEpTT04uc3RyaW5naWZ5KHsgdjogMiwgZjogc3RhdGUuZm9ybWF0aW9uLCBpZHM6IGlkcyB9KSk7CiAgICB9IGNhdGNoIChlKSB7fQogIH0KICBmdW5jdGlvbiByZXN0b3JlKCl7CiAgICB2YXIgcmF3ID0gbnVsbCwgb2JqID0gbnVsbDsKICAgIHRyeSB7IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdyY3ctbWRzYicpOyB9IGNhdGNoIChlKSB7fQogICAgaWYgKCFyYXcpIHJldHVybjsKICAgIHRyeSB7IG9iaiA9IEpTT04ucGFyc2UocmF3KTsgfSBjYXRjaCAoZSkgeyByZXR1cm47IH0KICAgIGlmICghb2JqIHx8ICFGT1JNQVRJT05TW29iai5mXSB8fCAhb2JqLmlkcyB8fCBvYmouaWRzLmxlbmd0aCAhPT0gMTEpIHJldHVybjsKICAgIHN0YXRlLmZvcm1hdGlvbiA9IG9iai5mOwogICAgc3RhdGUuc2xvdHMgPSBidWlsZFNsb3RzKG9iai5mKTsKICAgIHZhciBkZWYgPSBGT1JNQVRJT05TW29iai5mXSwgcGVuZCA9IFtdLCBpOwogICAgZm9yIChpID0gMDsgaSA8IDExOyBpKyspIGlmIChvYmouaWRzW2ldKSBwZW5kLnB1c2goeyByb2xlOiBkZWZbaV1bMF0sIGlkOiBvYmouaWRzW2ldIH0pOwogICAgaWYgKHBlbmQubGVuZ3RoKSBzdGF0ZS5wZW5kaW5nID0gcGVuZDsKICB9CiAgZnVuY3Rpb24gYXBwbHlQZW5kaW5nKCl7CiAgICBpZiAoIXN0YXRlLnBlbmRpbmcgfHwgIXN0YXRlLmRhdGEpIHJldHVybjsKICAgIHZhciBwZW5kID0gc3RhdGUucGVuZGluZywgaSwgaiwgcDsKICAgIHN0YXRlLnBlbmRpbmcgPSBudWxsOwogICAgZm9yIChpID0gMDsgaSA8IHBlbmQubGVuZ3RoOyBpKyspewogICAgICBwID0gc3RhdGUuYnlJZFtwZW5kW2ldLmlkXTsKICAgICAgaWYgKCFwKSBjb250aW51ZTsKICAgICAgZm9yIChqID0gMDsgaiA8IHN0YXRlLnNsb3RzLmxlbmd0aDsgaisrKXsKICAgICAgICBpZiAoc3RhdGUuc2xvdHNbal0ucm9sZSA9PT0gcGVuZFtpXS5yb2xlKXsKICAgICAgICAgIGlmICghc3RhdGUuc2xvdHNbal0ucGxheWVyKXsgc3RhdGUuc2xvdHNbal0ucGxheWVyID0gcDsgYnJlYWs7IH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIGluZ2VzdChkKXsKICAgIHZhciBpLCBwOwogICAgZm9yIChpID0gMDsgaSA8IGQucGxheWVycy5sZW5ndGg7IGkrKyl7IHAgPSBkLnBsYXllcnNbaV07IHAuX3MgPSBub3JtKHAubik7IHN0YXRlLmJ5SWRbcC5pZF0gPSBwOyB9CiAgICBpZiAoIXN0YXRlLmRhdGEpeyBzdGF0ZS5kYXRhID0gZDsgfQogICAgZWxzZSB7CiAgICAgIHN0YXRlLmRhdGEucGxheWVycyA9IHN0YXRlLmRhdGEucGxheWVycy5jb25jYXQoZC5wbGF5ZXJzKTsKICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5kYXRhLnRlYW1zLCBkLnRlYW1zKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gbG9hZERhdGEoY2IpewogICAgaWYgKHN0YXRlLmRhdGEpeyBpZiAoY2IpIGNiKCk7IHJldHVybjsgfQogICAgaWYgKHN0YXRlLmxvYWRpbmcpIHJldHVybjsKICAgIHN0YXRlLmxvYWRpbmcgPSB0cnVlOyBzdGF0ZS5sb2FkRXJyb3IgPSBmYWxzZTsKICAgIHJlbmRlclBhbmVsTGlzdCgpOwogICAgcmN3TG9hZFNldChSQ1dfU1JDLnRvcCkudGhlbihmdW5jdGlvbihkKXsKICAgICAgaW5nZXN0KGQpOwogICAgICBzdGF0ZS5sb2FkaW5nID0gZmFsc2U7CiAgICAgIGlmICh1cGRFbCkgdXBkRWwudGV4dENvbnRlbnQgPSBkLnNjcmFwZWRBdCB8fCBSQ1dfQ0FQVFVSRUQ7CiAgICAgIGFwcGx5UGVuZGluZygpOwogICAgICBidWlsZFRlYW1GaWx0ZXIoKTsKICAgICAgcmVuZGVyQWxsKCk7CiAgICAgIHJlbmRlclBhbmVsTGlzdCgpOwogICAgICBpZiAoY2IpIGNiKCk7CiAgICAgIC8qIHRoZSByZW1haW5pbmcgMiw1MTEgcGxheWVycyBzdHJlYW0gaW4gYmVoaW5kIHRoZSBmaXJzdCBwYWludCAqLwogICAgICByY3dMb2FkU2V0KFJDV19TUkMucmVzdCkudGhlbihmdW5jdGlvbihyKXsKICAgICAgICBpbmdlc3Qocik7CiAgICAgICAgYXBwbHlQZW5kaW5nKCk7CiAgICAgICAgYnVpbGRUZWFtRmlsdGVyKCk7CiAgICAgICAgcmVuZGVyQWxsKCk7CiAgICAgICAgcmVuZGVyUGFuZWxMaXN0KCk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCl7fSk7CiAgICB9KS5jYXRjaChmdW5jdGlvbigpewogICAgICBzdGF0ZS5sb2FkaW5nID0gZmFsc2U7IHN0YXRlLmxvYWRFcnJvciA9IHRydWU7CiAgICAgIHJlbmRlclBhbmVsTGlzdCgpOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBidWlsZFRlYW1GaWx0ZXIoKXsKICAgIGlmICghc3RhdGUuZGF0YSB8fCB0ZWFtRWwub3B0aW9ucy5sZW5ndGggPiAxKSByZXR1cm47CiAgICB2YXIgbmFtZXMgPSBbXSwgaWQsIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIG87CiAgICBmb3IgKGlkIGluIHN0YXRlLmRhdGEudGVhbXMpewogICAgICBpZiAoIXN0YXRlLmRhdGEudGVhbXMuaGFzT3duUHJvcGVydHkoaWQpKSBjb250aW51ZTsKICAgICAgbmFtZXMucHVzaChbaWQsIHN0YXRlLmRhdGEudGVhbXNbaWRdLmwgfHwgJyddKTsKICAgIH0KICAgIG5hbWVzLnNvcnQoZnVuY3Rpb24oYSwgYil7IHJldHVybiBhWzFdIDwgYlsxXSA\/IC0xIDogYVsxXSA+IGJbMV0gPyAxIDogMDsgfSk7CiAgICBvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7IG8udmFsdWUgPSAnJzsgby50ZXh0Q29udGVudCA9ICdBbGwgdGVhbXMnOwogICAgZnJhZy5hcHBlbmRDaGlsZChvKTsKICAgIG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsgby52YWx1ZSA9ICdGQSc7IG8udGV4dENvbnRlbnQgPSAnRnJlZSBhZ2VudHMnOwogICAgZnJhZy5hcHBlbmRDaGlsZChvKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspewogICAgICBvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7IG8udmFsdWUgPSBuYW1lc1tpXVswXTsgby50ZXh0Q29udGVudCA9IG5hbWVzW2ldWzFdOwogICAgICBmcmFnLmFwcGVuZENoaWxkKG8pOwogICAgfQogICAgdGVhbUVsLnRleHRDb250ZW50ID0gJyc7CiAgICB0ZWFtRWwuYXBwZW5kQ2hpbGQoZnJhZyk7CiAgICB0ZWFtRWwudmFsdWUgPSBzdGF0ZS50ZWFtOwogIH0KCiAgdmFyIG5vdGVUaW1lciA9IDA7CiAgZnVuY3Rpb24gc2hvd05vdGUobXNnKXsKICAgIG5vdGVFbC50ZXh0Q29udGVudCA9IG1zZzsKICAgIG5vdGVFbC5oaWRkZW4gPSBmYWxzZTsKICAgIGNsZWFyVGltZW91dChub3RlVGltZXIpOwogICAgbm90ZVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpeyBub3RlRWwuaGlkZGVuID0gdHJ1ZTsgfSwgNTAwMCk7CiAgfQoKICBmdW5jdGlvbiBhcHBseUZvcm1hdGlvbihmKXsKICAgIGlmICghRk9STUFUSU9OU1tmXSB8fCBmID09PSBzdGF0ZS5mb3JtYXRpb24pIHJldHVybjsKICAgIHZhciBuZXh0ID0gYnVpbGRTbG90cyhmKSwgcG9vbCA9IFtdLCBpLCBqOwogICAgZm9yIChpID0gMDsgaSA8IHN0YXRlLnNsb3RzLmxlbmd0aDsgaSsrKSBpZiAoc3RhdGUuc2xvdHNbaV0ucGxheWVyKSBwb29sLnB1c2goeyByb2xlOiBzdGF0ZS5zbG90c1tpXS5yb2xlLCBwbGF5ZXI6IHN0YXRlLnNsb3RzW2ldLnBsYXllciB9KTsKICAgIGZvciAoaSA9IDA7IGkgPCBuZXh0Lmxlbmd0aDsgaSsrKXsKICAgICAgZm9yIChqID0gMDsgaiA8IHBvb2wubGVuZ3RoOyBqKyspewogICAgICAgIGlmIChwb29sW2pdLnJvbGUgPT09IG5leHRbaV0ucm9sZSl7IG5leHRbaV0ucGxheWVyID0gcG9vbFtqXS5wbGF5ZXI7IHBvb2wuc3BsaWNlKGosIDEpOyBicmVhazsgfQogICAgICB9CiAgICB9CiAgICBzdGF0ZS5mb3JtYXRpb24gPSBmOwogICAgc3RhdGUuc2xvdHMgPSBuZXh0OwogICAgc3RhdGUuc2VsZWN0ZWQgPSAtMTsKICAgIGlmIChwb29sLmxlbmd0aCA+IDApIHNob3dOb3RlKHBvb2wubGVuZ3RoID09PSAxID8gJzEgcGxheWVyIHJlbW92ZWQg4oCUIHRoaXMgZ3JvdXBpbmcgaGFzIG5vIHNsb3QgZm9yIHRoYXQgcG9zaXRpb24uJyA6IHBvb2wubGVuZ3RoICsgJyBwbGF5ZXJzIHJlbW92ZWQg4oCUIHRoaXMgZ3JvdXBpbmcgaGFzIG5vIHNsb3QgZm9yIHRob3NlIHBvc2l0aW9ucy4nKTsKICAgIHJlbmRlckFsbCgpOwogICAgY2xvc2VQYW5lbChmYWxzZSk7CiAgfQoKICBmdW5jdGlvbiBjdXJyZW50U3VtbWFyeSgpewogICAgdmFyIGVudHJpZXMgPSBbXSwgaWR4ID0gW10sIGksIGs7CiAgICBmb3IgKGkgPSAwOyBpIDwgc3RhdGUuc2xvdHMubGVuZ3RoOyBpKyspewogICAgICBpZiAoc3RhdGUuc2xvdHNbaV0ucGxheWVyKXsgZW50cmllcy5wdXNoKHsgcDogc3RhdGUuc2xvdHNbaV0ucGxheWVyLCByb2xlOiBzdGF0ZS5zbG90c1tpXS5yb2xlIH0pOyBpZHgucHVzaChpKTsgfQogICAgfQogICAgdmFyIHMgPSBsaW5ldXBTdW1tYXJ5KGVudHJpZXMpLCBvb3BCeVNsb3QgPSB7fTsKICAgIGZvciAoayA9IDA7IGsgPCBpZHgubGVuZ3RoOyBrKyspIG9vcEJ5U2xvdFtpZHhba11dID0gcy5wZXJba107CiAgICByZXR1cm4geyBvb3BCeVNsb3Q6IG9vcEJ5U2xvdCwgb29wOiBzLm9vcCwgc3RhcnM6IHMuc3RhcnMsIGF2Zzogcy5hdmcsIGNvdW50OiBlbnRyaWVzLmxlbmd0aCB9OwogIH0KCiAgZnVuY3Rpb24gcG9ydHJhaXRVcmwocCl7CiAgICBpZiAoIXN0YXRlLmRhdGEgfHwgIXAucGkpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHN0YXRlLmRhdGEucG9ydEJhc2UgKyBwLnBpICsgc3RhdGUuZGF0YS5wb3J0U3VmOwogIH0KICBmdW5jdGlvbiBta0ZhY2UocCwgY2xzKXsKICAgIHZhciB1cmwgPSBwb3J0cmFpdFVybChwKTsKICAgIGlmICghdXJsKXsKICAgICAgdmFyIHMwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICBzMC5jbGFzc05hbWUgPSBjbHMgKyAnIHJjdy1tZHNiLWluaXQnOwogICAgICBzMC5zdHlsZS5iYWNrZ3JvdW5kID0gQVZDT0xPUlNbcC5pZCAlIEFWQ09MT1JTLmxlbmd0aF07CiAgICAgIHMwLnRleHRDb250ZW50ID0gaW5pdGlhbHMocC5uKTsKICAgICAgcmV0dXJuIHMwOwogICAgfQogICAgdmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOwogICAgaW1nLmNsYXNzTmFtZSA9IGNsczsgaW1nLmFsdCA9ICcnOyBpbWcubG9hZGluZyA9ICdsYXp5JzsgaW1nLmRlY29kaW5nID0gJ2FzeW5jJzsKICAgIGltZy5zcmMgPSB1cmw7CiAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uKCl7CiAgICAgIGltZy5vbmVycm9yID0gbnVsbDsKICAgICAgdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgIHMuY2xhc3NOYW1lID0gY2xzICsgJyByY3ctbWRzYi1pbml0JzsKICAgICAgcy5zdHlsZS5iYWNrZ3JvdW5kID0gQVZDT0xPUlNbcC5pZCAlIEFWQ09MT1JTLmxlbmd0aF07CiAgICAgIHMudGV4dENvbnRlbnQgPSBpbml0aWFscyhwLm4pOwogICAgICBpZiAoaW1nLnBhcmVudE5vZGUpIGltZy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChzLCBpbWcpOwogICAgfTsKICAgIHJldHVybiBpbWc7CiAgfQogIGZ1bmN0aW9uIHRlYW1PZihwKXsKICAgIGlmICghc3RhdGUuZGF0YSB8fCBwLnQgPT09IG51bGwgfHwgcC50ID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHN0YXRlLmRhdGEudGVhbXNbU3RyaW5nKHAudCldIHx8IG51bGw7CiAgfQogIGZ1bmN0aW9uIG1rQ3Jlc3QodGVhbSwgY2xzKXsKICAgIHZhciBsYWJlbCA9IHRlYW0gJiYgdGVhbS5sID8gdGVhbS5sIDogJyc7CiAgICBmdW5jdGlvbiBmYWxsYmFjaygpewogICAgICB2YXIgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKICAgICAgcy5jbGFzc05hbWUgPSBjbHMgKyAnIHJjdy1tZHNiLWNyZXN0aW5pdCc7CiAgICAgIHMudGV4dENvbnRlbnQgPSBsYWJlbCA\/IGxhYmVsLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpIDogJ+KAkyc7CiAgICAgIHJldHVybiBzOwogICAgfQogICAgaWYgKCF0ZWFtIHx8ICF0ZWFtLmcpIHJldHVybiBmYWxsYmFjaygpOwogICAgdmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOwogICAgaW1nLmNsYXNzTmFtZSA9IGNsczsgaW1nLmFsdCA9IGxhYmVsOyBpbWcubG9hZGluZyA9ICdsYXp5JzsgaW1nLmRlY29kaW5nID0gJ2FzeW5jJzsKICAgIGltZy5zcmMgPSBzdGF0ZS5kYXRhLmxvZ29CYXNlICsgdGVhbS5nOwogICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbigpeyBpbWcub25lcnJvciA9IG51bGw7IGlmIChpbWcucGFyZW50Tm9kZSkgaW1nLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZhbGxiYWNrKCksIGltZyk7IH07CiAgICByZXR1cm4gaW1nOwogIH0KCiAgZnVuY3Rpb24gc2xvdE5vZGUocywgaSwgc3VtKXsKICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICBiLnR5cGUgPSAnYnV0dG9uJzsKICAgIGIuY2xhc3NOYW1lID0gJ3Jjdy1tZHNiLXNsb3QnOwogICAgYi5zZXRBdHRyaWJ1dGUoJ2RhdGEtaScsIFN0cmluZyhpKSk7CiAgICBiLnN0eWxlLmxlZnQgPSBzLnggKyAnJSc7CiAgICBiLnN0eWxlLnRvcCA9IHMueSArICclJzsKICAgIGlmICghcy5wbGF5ZXIpewogICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKICAgICAgYy5jbGFzc05hbWUgPSAncmN3LW1kc2ItZW1wdHljJzsKICAgICAgYy50ZXh0Q29udGVudCA9IHMucm9sZTsKICAgICAgYi5hcHBlbmRDaGlsZChjKTsKICAgICAgYi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBzLnJvbGUgKyAnIOKAlCBlbXB0eS4gQWRkIGEgcGxheWVyLicpOwogICAgfSBlbHNlIHsKICAgICAgdmFyIHAgPSBzLnBsYXllcjsKICAgICAgdmFyIGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgIHZhciBmdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsgZncuY2xhc3NOYW1lID0gJ3Jjdy1tZHNiLWZhY2V3cmFwJzsKICAgICAgZncuYXBwZW5kQ2hpbGQobWtGYWNlKHAsICdyY3ctbWRzYi1mYWNlJykpOwogICAgICB2YXIgb3YgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgIG92LmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1vdnIgJyArIHRpZXJDbGFzcyhwLm8pOyBvdi50ZXh0Q29udGVudCA9IFN0cmluZyhwLm8pOwogICAgICBmdy5hcHBlbmRDaGlsZChvdik7CiAgICAgIGZ3LmFwcGVuZENoaWxkKG1rQ3Jlc3QodGVhbU9mKHApLCAncmN3LW1kc2ItY3Jlc3QnKSk7CiAgICAgIGlmIChwLnggJiYgcC54Lmxlbmd0aCl7CiAgICAgICAgdmFyIHhiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICAgIHhiLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1hYiByY3ctbWRzYi1hYngnOyB4Yi50ZXh0Q29udGVudCA9ICdYJzsKICAgICAgICB4Yi50aXRsZSA9ICdYLUZhY3RvcjogJyArIHAueC5qb2luKCcsICcpOwogICAgICAgIGZ3LmFwcGVuZENoaWxkKHhiKTsKICAgICAgfSBlbHNlIGlmIChwLnMgJiYgcC5zLmxlbmd0aCl7CiAgICAgICAgdmFyIHNiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICAgIHNiLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1hYiByY3ctbWRzYi1hYnMnOyBzYi50ZXh0Q29udGVudCA9ICdTJzsKICAgICAgICBzYi50aXRsZSA9ICdTdXBlcnN0YXIgYWJpbGl0aWVzOiAnICsgcC5zLmxlbmd0aDsKICAgICAgICBmdy5hcHBlbmRDaGlsZChzYik7CiAgICAgIH0KICAgICAgaWYgKHN1bS5vb3BCeVNsb3RbaV0pewogICAgICAgIHZhciBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICAgIGQuY2xhc3NOYW1lID0gJ3Jjdy1tZHNiLW9vcCc7IGQudGV4dENvbnRlbnQgPSAnT09QJzsKICAgICAgICBkLnRpdGxlID0gJ091dCBvZiBwb3NpdGlvbic7CiAgICAgICAgZncuYXBwZW5kQ2hpbGQoZCk7CiAgICAgIH0KICAgICAgY2FyZC5hcHBlbmRDaGlsZChmdyk7CiAgICAgIHZhciBydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsgcnQuY2xhc3NOYW1lID0gJ3Jjdy1tZHNiLXJvbGV0JzsgcnQudGV4dENvbnRlbnQgPSBzLnJvbGU7CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQocnQpOwogICAgICB2YXIgbm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7IG5tLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1zbmFtZSc7CiAgICAgIG5tLnRleHRDb250ZW50ID0gKHAuaiA\/ICcjJyArIHAuaiArICcgJyA6ICcnKSArIHNob3J0TmFtZShwLm4pOwogICAgICBjYXJkLmFwcGVuZENoaWxkKG5tKTsKICAgICAgYi5hcHBlbmRDaGlsZChjYXJkKTsKICAgICAgYi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBzLnJvbGUgKyAnIOKAlCAnICsgcC5uICsgJywgcmF0ZWQgJyArIHAubyArCiAgICAgICAgKHN1bS5vb3BCeVNsb3RbaV0gPyAnLCBvdXQgb2YgcG9zaXRpb24nIDogJycpICsgJy4gVGFwIHRvIHNlZSBhdHRyaWJ1dGVzIG9yIHJlcGxhY2UuJyk7CiAgICB9CiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgaWYgKHMucGxheWVyICYmIHN0YXRlLnNlbGVjdGVkICE9PSBpKXsgc3RhdGUuc2VsZWN0ZWQgPSBpOyByZW5kZXJDYXJkKCk7IHJldHVybjsgfQogICAgICBvcGVuUGFuZWwoaSk7CiAgICB9KTsKICAgIHJldHVybiBiOwogIH0KICBmdW5jdGlvbiByZW5kZXJTbG90cyhzdW0pewogICAgc2xvdHNFbC50ZXh0Q29udGVudCA9ICcnOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgc3RhdGUuc2xvdHMubGVuZ3RoOyBpKyspIHNsb3RzRWwuYXBwZW5kQ2hpbGQoc2xvdE5vZGUoc3RhdGUuc2xvdHNbaV0sIGksIHN1bSkpOwogICAgdmFyIHkgPSBsb3NGb3Ioc3RhdGUuZm9ybWF0aW9uKTsKICAgIGxvc0VsLnN0eWxlLnRvcCA9IHkgKyAnJSc7CiAgICBsb3NULnN0eWxlLnRvcCA9IHkgKyAnJSc7CiAgfQogIGZ1bmN0aW9uIHVwZGF0ZUJhcihzdW0pewogICAgc3RhdFIudGV4dENvbnRlbnQgPSBzdW0uY291bnQgPyAoTWF0aC5yb3VuZChzdW0uYXZnICogMTApIC8gMTApLnRvRml4ZWQoMSkgOiAn4oCUJzsKICAgIHN0YXROLnRleHRDb250ZW50ID0gc3VtLmNvdW50ICsgJy8xMSc7CiAgICBzdGF0Uy50ZXh0Q29udGVudCA9IFN0cmluZyhzdW0uc3RhcnMpOwogICAgc3RhdE8udGV4dENvbnRlbnQgPSBTdHJpbmcoc3VtLm9vcCk7CiAgfQoKICAvKiAtLS0tIHNlbGVjdGVkLXBsYXllciBhdHRyaWJ1dGUgY2FyZCAtLS0tICovCiAgZnVuY3Rpb24gcmVuZGVyQ2FyZCgpewogICAgdmFyIGkgPSBzdGF0ZS5zZWxlY3RlZDsKICAgIGlmIChpIDwgMCB8fCAhc3RhdGUuc2xvdHNbaV0gfHwgIXN0YXRlLnNsb3RzW2ldLnBsYXllciB8fCAhc3RhdGUuZGF0YSl7CiAgICAgIGNhcmRFbC5oaWRkZW4gPSB0cnVlOyBjYXJkRWwudGV4dENvbnRlbnQgPSAnJzsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHAgPSBzdGF0ZS5zbG90c1tpXS5wbGF5ZXIsIHRlYW0gPSB0ZWFtT2YocCk7CiAgICBjYXJkRWwudGV4dENvbnRlbnQgPSAnJzsKICAgIGNhcmRFbC5oaWRkZW4gPSBmYWxzZTsKCiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBoZWFkLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1jaGVhZCc7CiAgICBoZWFkLmFwcGVuZENoaWxkKG1rRmFjZShwLCAncmN3LW1kc2ItY2ZhY2UnKSk7CiAgICB2YXIgbWFpbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBtYWluLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1jbWFpbic7CiAgICB2YXIgbm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoNCcpOyBubS5jbGFzc05hbWUgPSAncmN3LW1kc2ItY25hbWUnOwogICAgbm0udGV4dENvbnRlbnQgPSAocC5qID8gJyMnICsgcC5qICsgJyAnIDogJycpICsgcC5uOwogICAgbWFpbi5hcHBlbmRDaGlsZChubSk7CiAgICB2YXIgbWV0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsgbWV0YS5jbGFzc05hbWUgPSAncmN3LW1kc2ItY21ldGEnOwogICAgdmFyIGJpdHMgPSBbcC5wLCB0ZWFtID8gdGVhbS5sIDogJ0ZyZWUgYWdlbnQnXTsKICAgIGlmIChwLmFyKSBiaXRzLnB1c2gocC5hcik7CiAgICBpZiAocC5hKSBiaXRzLnB1c2goJ2FnZSAnICsgcC5hKTsKICAgIGlmIChwLmNvbCkgYml0cy5wdXNoKHAuY29sKTsKICAgIG1ldGEudGV4dENvbnRlbnQgPSBiaXRzLmpvaW4oJyDCtyAnKTsKICAgIG1haW4uYXBwZW5kQ2hpbGQobWV0YSk7CiAgICBoZWFkLmFwcGVuZENoaWxkKG1haW4pOwogICAgdmFyIG92ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgb3YuY2xhc3NOYW1lID0gJ3Jjdy1tZHNiLWNvdnIgJyArIHRpZXJDbGFzcyhwLm8pOyBvdi50ZXh0Q29udGVudCA9IFN0cmluZyhwLm8pOwogICAgaGVhZC5hcHBlbmRDaGlsZChvdik7CiAgICBjYXJkRWwuYXBwZW5kQ2hpbGQoaGVhZCk7CgogICAgaWYgKChwLnggJiYgcC54Lmxlbmd0aCkgfHwgKHAucyAmJiBwLnMubGVuZ3RoKSl7CiAgICAgIHZhciBhYnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgYWJzLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1jYWJzJzsKICAgICAgdmFyIGo7CiAgICAgIGZvciAoaiA9IDA7IHAueCAmJiBqIDwgcC54Lmxlbmd0aDsgaisrKXsKICAgICAgICB2YXIgeGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgICAgeGUuY2xhc3NOYW1lID0gJ3Jjdy1tZHNiLWNhYiByY3ctbWRzYi1yYWJ4JzsgeGUudGV4dENvbnRlbnQgPSAnWC1GYWN0b3I6ICcgKyBwLnhbal07CiAgICAgICAgYWJzLmFwcGVuZENoaWxkKHhlKTsKICAgICAgfQogICAgICBmb3IgKGogPSAwOyBwLnMgJiYgaiA8IHAucy5sZW5ndGg7IGorKyl7CiAgICAgICAgdmFyIHNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICAgIHNlLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1jYWIgcmN3LW1kc2ItcmFicyc7IHNlLnRleHRDb250ZW50ID0gcC5zW2pdOwogICAgICAgIGFicy5hcHBlbmRDaGlsZChzZSk7CiAgICAgIH0KICAgICAgY2FyZEVsLmFwcGVuZENoaWxkKGFicyk7CiAgICB9CgogICAgdmFyIGtleXMgPSAoc3RhdGUuZGF0YS5wb3NLZXkgfHwge30pW3AucF0gfHwgW107CiAgICBpZiAoIWtleXMubGVuZ3RoKXsKICAgICAgdmFyIG5vbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7IG5vbmUuY2xhc3NOYW1lID0gJ3Jjdy1tZHNiLWNub25lJzsKICAgICAgbm9uZS50ZXh0Q29udGVudCA9ICdFQSBkb2VzIG5vdCBwdWJsaXNoIGF0dHJpYnV0ZXMgdGhhdCBtZWFuaW5nZnVsbHkgc2VwYXJhdGUgdGhpcyBwb3NpdGlvbiwgJwogICAgICAgICsgJ3NvIHRoZXJlIGlzIG5vdGhpbmcgdG8gY2hhcnQgaGVyZS4nOwogICAgICBjYXJkRWwuYXBwZW5kQ2hpbGQobm9uZSk7CiAgICB9IGVsc2UgewogICAgICB2YXIgZ3JpZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBncmlkLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1zZ3JpZCc7CiAgICAgIHZhciBrOwogICAgICBmb3IgKGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKyl7CiAgICAgICAgdmFyIGlkeCA9IGtleXNba10sIHZhbCA9IHAuc3RbaWR4XTsKICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTsKICAgICAgICB2YXIgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IHJvdy5jbGFzc05hbWUgPSAncmN3LW1kc2Itc3Jvdyc7CiAgICAgICAgdmFyIGxhYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsgbGFiLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1zbGFiJzsKICAgICAgICB2YXIgbHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7IGxzLnRleHRDb250ZW50ID0gc3RhdExhYmVsKHN0YXRlLmRhdGEuc3RhdE9yZGVyW2lkeF0pOwogICAgICAgIHZhciBsdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2InKTsgbHYudGV4dENvbnRlbnQgPSBTdHJpbmcodmFsKTsKICAgICAgICBsYWIuYXBwZW5kQ2hpbGQobHMpOyBsYWIuYXBwZW5kQ2hpbGQobHYpOwogICAgICAgIHJvdy5hcHBlbmRDaGlsZChsYWIpOwogICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyB0ci5jbGFzc05hbWUgPSAncmN3LW1kc2Itc3RyYWNrJzsKICAgICAgICB2YXIgZmwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBmbC5jbGFzc05hbWUgPSAncmN3LW1kc2Itc2ZpbGwnICsgKHZhbCA+PSA5MCA\/ICcgcmN3LW1kc2Itc2ZpbGwtaGknIDogdmFsIDwgNzAgPyAnIHJjdy1tZHNiLXNmaWxsLWxvJyA6ICcnKTsKICAgICAgICBmbC5zdHlsZS53aWR0aCA9IE1hdGgubWF4KDIsIE1hdGgubWluKDEwMCwgdmFsKSkgKyAnJSc7CiAgICAgICAgdHIuYXBwZW5kQ2hpbGQoZmwpOwogICAgICAgIHJvdy5hcHBlbmRDaGlsZCh0cik7CiAgICAgICAgZ3JpZC5hcHBlbmRDaGlsZChyb3cpOwogICAgICB9CiAgICAgIGNhcmRFbC5hcHBlbmRDaGlsZChncmlkKTsKICAgIH0KICAgIHZhciBoaW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOyBoaW50LmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1jaGludCc7CiAgICBoaW50LnRleHRDb250ZW50ID0gJ1Nob3dpbmcgdGhlIGF0dHJpYnV0ZXMgdGhhdCBzZXBhcmF0ZSBhICcgKyBwLnAgKyAnIGZyb20gdGhlIHJlc3Qgb2YgdGhlIGxlYWd1ZS4gJwogICAgICArICdUYXAgdGhlIHNsb3QgYWdhaW4gdG8gc3dhcCB0aGlzIHBsYXllciBvdXQuJzsKICAgIGNhcmRFbC5hcHBlbmRDaGlsZChoaW50KTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlckFsbCgpewogICAgdmFyIHN1bSA9IGN1cnJlbnRTdW1tYXJ5KCk7CiAgICByZW5kZXJTbG90cyhzdW0pOwogICAgdXBkYXRlQmFyKHN1bSk7CiAgICByZW5kZXJDYXJkKCk7CiAgICBzYXZlKCk7CiAgfQoKICBmdW5jdGlvbiBvcGVuUGFuZWwoaSl7CiAgICBzdGF0ZS5waWNrSW5kZXggPSBpOwogICAgc3RhdGUuYWxsUG9zID0gZmFsc2U7CiAgICBzdGF0ZS5xdWVyeSA9ICcnOwogICAgdG9nRWwuc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAnZmFsc2UnKTsKICAgIHNlYXJjaEVsLnZhbHVlID0gJyc7CiAgICB2YXIgcyA9IHN0YXRlLnNsb3RzW2ldOwogICAgcGFuZWxUaXRsZS50ZXh0Q29udGVudCA9IChzLnBsYXllciA\/ICdSZXBsYWNlICcgOiAnUGljayBhICcpICsgcy5yb2xlOwogICAgcmVtb3ZlQnRuLmhpZGRlbiA9ICFzLnBsYXllcjsKICAgIHJvb3QuY2xhc3NMaXN0LmFkZCgncmN3LW1kc2Itb3BlbicpOwogICAgaWYgKCFzdGF0ZS5kYXRhKSBsb2FkRGF0YSgpOwogICAgcmVuZGVyUGFuZWxMaXN0KCk7CiAgICB0cnkgeyBzZWFyY2hFbC5mb2N1cygpOyB9IGNhdGNoIChlKSB7fQogIH0KICBmdW5jdGlvbiBjbG9zZVBhbmVsKGZvY3VzQmFjayl7CiAgICBpZiAoc3RhdGUucGlja0luZGV4IDwgMCkgcmV0dXJuOwogICAgdmFyIGkgPSBzdGF0ZS5waWNrSW5kZXg7CiAgICBzdGF0ZS5waWNrSW5kZXggPSAtMTsKICAgIHJvb3QuY2xhc3NMaXN0LnJlbW92ZSgncmN3LW1kc2Itb3BlbicpOwogICAgaWYgKGZvY3VzQmFjayAhPT0gZmFsc2UpewogICAgICB2YXIgZWwgPSBzbG90c0VsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWk9IicgKyBpICsgJyJdJyk7CiAgICAgIGlmIChlbCl7IHRyeSB7IGVsLmZvY3VzKCk7IH0gY2F0Y2ggKGUpIHt9IH0KICAgIH0KICB9CiAgZnVuY3Rpb24gbXNnTm9kZSh0eHQsIHdpdGhTcGluLCB3aXRoUmV0cnkpewogICAgdmFyIHcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgdy5jbGFzc05hbWUgPSAncmN3LW1kc2Itc3RhdGUnOwogICAgaWYgKHdpdGhTcGluKXsgdmFyIHNwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOyBzcC5jbGFzc05hbWUgPSAncmN3LW1kc2Itc3Bpbic7IHcuYXBwZW5kQ2hpbGQoc3ApOyB9CiAgICB2YXIgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsgdC5jbGFzc05hbWUgPSAncmN3LW1kc2Itc3RhdGV0eHQnOyB0LnRleHRDb250ZW50ID0gdHh0OyB3LmFwcGVuZENoaWxkKHQpOwogICAgaWYgKHdpdGhSZXRyeSl7CiAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgIGIudHlwZSA9ICdidXR0b24nOyBiLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1idG4nOyBiLnRleHRDb250ZW50ID0gJ1JldHJ5JzsKICAgICAgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IHN0YXRlLmxvYWRFcnJvciA9IGZhbHNlOyBsb2FkRGF0YSgpOyB9KTsKICAgICAgdy5hcHBlbmRDaGlsZChiKTsKICAgIH0KICAgIHJldHVybiB3OwogIH0KICBmdW5jdGlvbiByb3dOb2RlKHAsIGluWEkpewogICAgdmFyIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgIGIudHlwZSA9ICdidXR0b24nOwogICAgYi5jbGFzc05hbWUgPSAncmN3LW1kc2Itcm93JyArIChpblhJID8gJyByY3ctbWRzYi1kaW1yJyA6ICcnKTsKICAgIGIuYXBwZW5kQ2hpbGQobWtGYWNlKHAsICdyY3ctbWRzYi1yZmFjZScpKTsKICAgIHZhciBtYWluID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOyBtYWluLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1ybWFpbic7CiAgICB2YXIgbm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7IG5tLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1ybmFtZSc7CiAgICBubS50ZXh0Q29udGVudCA9IChwLmogPyAnIycgKyBwLmogKyAnICcgOiAnJykgKyBwLm47CiAgICBtYWluLmFwcGVuZENoaWxkKG5tKTsKICAgIHZhciBtZXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOyBtZXRhLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1ybWV0YSc7CiAgICB2YXIgcG9zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOyBwb3MuY2xhc3NOYW1lID0gJ3Jjdy1tZHNiLXJwb3MnOyBwb3MudGV4dENvbnRlbnQgPSBwLnA7CiAgICBtZXRhLmFwcGVuZENoaWxkKHBvcyk7CiAgICB2YXIgdGVhbSA9IHRlYW1PZihwKTsKICAgIGlmICh0ZWFtKXsKICAgICAgbWV0YS5hcHBlbmRDaGlsZChta0NyZXN0KHRlYW0sICdyY3ctbWRzYi1yY3Jlc3QnKSk7CiAgICAgIHZhciBjbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsgY2wuY2xhc3NOYW1lID0gJ3Jjdy1tZHNiLXJjbHViJzsgY2wudGV4dENvbnRlbnQgPSB0ZWFtLmw7CiAgICAgIG1ldGEuYXBwZW5kQ2hpbGQoY2wpOwogICAgfSBlbHNlIHsKICAgICAgdmFyIGZhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOyBmYS5jbGFzc05hbWUgPSAncmN3LW1kc2ItcmNsdWInOyBmYS50ZXh0Q29udGVudCA9ICdGcmVlIGFnZW50JzsKICAgICAgbWV0YS5hcHBlbmRDaGlsZChmYSk7CiAgICB9CiAgICBpZiAocC54ICYmIHAueC5sZW5ndGgpewogICAgICB2YXIgeHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgIHh0LmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1yYWIgcmN3LW1kc2ItcmFieCc7IHh0LnRleHRDb250ZW50ID0gJ1gtRmFjdG9yJzsKICAgICAgbWV0YS5hcHBlbmRDaGlsZCh4dCk7CiAgICB9IGVsc2UgaWYgKHAucyAmJiBwLnMubGVuZ3RoKXsKICAgICAgdmFyIHN0MiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKICAgICAgc3QyLmNsYXNzTmFtZSA9ICdyY3ctbWRzYi1yYWIgcmN3LW1kc2ItcmFicyc7IHN0Mi50ZXh0Q29udGVudCA9IHAucy5sZW5ndGggKyAnIFNTJzsKICAgICAgbWV0YS5hcHBlbmRDaGlsZChzdDIpOwogICAgfQogICAgaWYgKGluWEkpeyB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOyB0YWcuY2xhc3NOYW1lID0gJ3Jjdy1tZHNiLWlueGknOyB0YWcudGV4dENvbnRlbnQgPSAnSW4gbGluZXVwJzsgbWV0YS5hcHBlbmRDaGlsZCh0YWcpOyB9CiAgICBtYWluLmFwcGVuZENoaWxkKG1ldGEpOwogICAgYi5hcHBlbmRDaGlsZChtYWluKTsKICAgIHZhciBvdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsgb3YuY2xhc3NOYW1lID0gJ3Jjdy1tZHNiLWIgJyArIHRpZXJDbGFzcyhwLm8pOyBvdi50ZXh0Q29udGVudCA9IFN0cmluZyhwLm8pOwogICAgYi5hcHBlbmRDaGlsZChvdik7CiAgICBiLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHAubiArICcsICcgKyBwLnAgKyAnLCByYXRlZCAnICsgcC5vICsgKHRlYW0gPyAnLCAnICsgdGVhbS5sIDogJywgZnJlZSBhZ2VudCcpKTsKICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBwbGFjZVBsYXllcihwLmlkKTsgfSk7CiAgICByZXR1cm4gYjsKICB9CiAgZnVuY3Rpb24gcmVuZGVyUGFuZWxMaXN0KCl7CiAgICBpZiAoc3RhdGUucGlja0luZGV4IDwgMCkgcmV0dXJuOwogICAgbGlzdEVsLnRleHRDb250ZW50ID0gJyc7CiAgICBpZiAoc3RhdGUubG9hZEVycm9yKXsKICAgICAgbGlzdEVsLmFwcGVuZENoaWxkKG1zZ05vZGUoJ0NvdWxkbuKAmXQgbG9hZCB0aGUgcGxheWVyIGRhdGFiYXNlLiBDaGVjayB5b3VyIGNvbm5lY3Rpb24gYW5kIHRyeSBhZ2Fpbi4nLCBmYWxzZSwgdHJ1ZSkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIXN0YXRlLmRhdGEpewogICAgICBsaXN0RWwuYXBwZW5kQ2hpbGQobXNnTm9kZSgnTG9hZGluZyBwbGF5ZXIgZGF0YWJhc2XigKYnLCB0cnVlLCBmYWxzZSkpOwogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgcm9sZSA9IHN0YXRlLnNsb3RzW3N0YXRlLnBpY2tJbmRleF0ucm9sZTsKICAgIHZhciBwb29sID0gcG9vbEZvcihzdGF0ZS5kYXRhLnBsYXllcnMsIHJvbGUsIHN0YXRlLmFsbFBvcywgc3RhdGUucXVlcnksIHN0YXRlLnRlYW0pOwogICAgaWYgKCFwb29sLmxlbmd0aCl7CiAgICAgIGxpc3RFbC5hcHBlbmRDaGlsZChtc2dOb2RlKCdObyBwbGF5ZXJzIG1hdGNoIHlvdXIgZmlsdGVycy4nLCBmYWxzZSwgZmFsc2UpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIG1heCA9IDYwLCBuID0gTWF0aC5taW4ocG9vbC5sZW5ndGgsIG1heCksIGk7CiAgICB2YXIgcGxhY2VkID0ge30sIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICBmb3IgKGkgPSAwOyBpIDwgc3RhdGUuc2xvdHMubGVuZ3RoOyBpKyspIGlmIChzdGF0ZS5zbG90c1tpXS5wbGF5ZXIpIHBsYWNlZFtzdGF0ZS5zbG90c1tpXS5wbGF5ZXIuaWRdID0gMTsKICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIGZyYWcuYXBwZW5kQ2hpbGQocm93Tm9kZShwb29sW2ldLCAhIXBsYWNlZFtwb29sW2ldLmlkXSkpOwogICAgbGlzdEVsLmFwcGVuZENoaWxkKGZyYWcpOwogICAgaWYgKHBvb2wubGVuZ3RoID4gbWF4KXsKICAgICAgdmFyIG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgbS5jbGFzc05hbWUgPSAncmN3LW1kc2ItbW9yZSc7CiAgICAgIG0udGV4dENvbnRlbnQgPSAnU2hvd2luZyB0aGUgdG9wICcgKyBtYXggKyAnIG9mICcgKyBwb29sLmxlbmd0aCArICcg4oCUIHNlYXJjaCBvciBmaWx0ZXIgdG8gbmFycm93IGl0IGRvd24uJzsKICAgICAgbGlzdEVsLmFwcGVuZENoaWxkKG0pOwogICAgfQogICAgbGlzdEVsLnNjcm9sbFRvcCA9IDA7CiAgfQogIGZ1bmN0aW9uIHBsYWNlUGxheWVyKGlkKXsKICAgIHZhciBpID0gc3RhdGUucGlja0luZGV4OwogICAgaWYgKGkgPCAwKSByZXR1cm47CiAgICB2YXIgcCA9IHN0YXRlLmJ5SWRbaWRdOwogICAgaWYgKCFwKSByZXR1cm47CiAgICB2YXIgazsKICAgIGZvciAoayA9IDA7IGsgPCBzdGF0ZS5zbG90cy5sZW5ndGg7IGsrKyl7CiAgICAgIGlmIChzdGF0ZS5zbG90c1trXS5wbGF5ZXIgJiYgc3RhdGUuc2xvdHNba10ucGxheWVyLmlkID09PSBpZCkgc3RhdGUuc2xvdHNba10ucGxheWVyID0gbnVsbDsKICAgIH0KICAgIHN0YXRlLnNsb3RzW2ldLnBsYXllciA9IHA7CiAgICBzdGF0ZS5zZWxlY3RlZCA9IGk7CiAgICByZW5kZXJBbGwoKTsKICAgIGNsb3NlUGFuZWwodHJ1ZSk7CiAgfQoKICAvKiAtLS0tIGF1dG8tZmlsbDogaGlnaGVzdCByYXRlZCBlbGlnaWJsZSBwbGF5ZXIgcGVyIHNsb3QsIG5vIGR1cGxpY2F0ZXMgLS0tLSAqLwogIGZ1bmN0aW9uIGF1dG9GaWxsKCl7CiAgICBsb2FkRGF0YShmdW5jdGlvbigpewogICAgICB2YXIgdXNlZCA9IHt9LCBpLCBqLCBwb29sLCBwOwogICAgICBmb3IgKGkgPSAwOyBpIDwgc3RhdGUuc2xvdHMubGVuZ3RoOyBpKyspewogICAgICAgIGlmIChzdGF0ZS5zbG90c1tpXS5wbGF5ZXIpeyB1c2VkW3N0YXRlLnNsb3RzW2ldLnBsYXllci5pZF0gPSAxOyB9CiAgICAgIH0KICAgICAgZm9yIChpID0gMDsgaSA8IHN0YXRlLnNsb3RzLmxlbmd0aDsgaSsrKXsKICAgICAgICBpZiAoc3RhdGUuc2xvdHNbaV0ucGxheWVyKSBjb250aW51ZTsKICAgICAgICBwb29sID0gcG9vbEZvcihzdGF0ZS5kYXRhLnBsYXllcnMsIHN0YXRlLnNsb3RzW2ldLnJvbGUsIGZhbHNlLCAnJywgJycpOwogICAgICAgIGZvciAoaiA9IDA7IGogPCBwb29sLmxlbmd0aDsgaisrKXsKICAgICAgICAgIHAgPSBwb29sW2pdOwogICAgICAgICAgaWYgKHVzZWRbcC5pZF0pIGNvbnRpbnVlOwogICAgICAgICAgc3RhdGUuc2xvdHNbaV0ucGxheWVyID0gcDsKICAgICAgICAgIHVzZWRbcC5pZF0gPSAxOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRlLnNlbGVjdGVkID0gLTE7CiAgICAgIHJlbmRlckFsbCgpOwogICAgICBzaG93Tm90ZSgnRmlsbGVkIGV2ZXJ5IGVtcHR5IHNsb3Qgd2l0aCB0aGUgaGlnaGVzdCByYXRlZCBwbGF5ZXIgYXZhaWxhYmxlIGF0IHRoYXQgcG9zaXRpb24uJyk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGxpbmV1cFRleHQoKXsKICAgIHZhciBzdW0gPSBjdXJyZW50U3VtbWFyeSgpLCBsaW5lcyA9IFtdLCBpLCBzLCB0ZWFtOwogICAgbGluZXMucHVzaCgnTWFkZGVuIE5GTCAyNyBsaW5ldXAg4oCUICcgKyBzdGF0ZS5mb3JtYXRpb24pOwogICAgZm9yIChpID0gMDsgaSA8IHN0YXRlLnNsb3RzLmxlbmd0aDsgaSsrKXsKICAgICAgcyA9IHN0YXRlLnNsb3RzW2ldOwogICAgICBpZiAocy5wbGF5ZXIpewogICAgICAgIHRlYW0gPSB0ZWFtT2Yocy5wbGF5ZXIpOwogICAgICAgIGxpbmVzLnB1c2gocy5yb2xlICsgJyAgJyArIHMucGxheWVyLm4gKyAnICAnICsgcy5wbGF5ZXIubyArICcgICcgKyAodGVhbSA\/IHRlYW0ubCA6ICdGcmVlIGFnZW50JykpOwogICAgICB9IGVsc2UgewogICAgICAgIGxpbmVzLnB1c2gocy5yb2xlICsgJyAg4oCUJyk7CiAgICAgIH0KICAgIH0KICAgIGxpbmVzLnB1c2goJ0F2ZXJhZ2UgT1ZSOiAnICsgKHN1bS5jb3VudCA\/IChNYXRoLnJvdW5kKHN1bS5hdmcgKiAxMCkgLyAxMCkudG9GaXhlZCgxKSA6ICfigJQnKSArCiAgICAgICAgICAgICAgICcgwrcgU3RhciBhYmlsaXRpZXM6ICcgKyBzdW0uc3RhcnMgKyAnIMK3IE91dCBvZiBwb3NpdGlvbjogJyArIHN1bS5vb3ApOwogICAgbGluZXMucHVzaCgnQnVpbHQgYXQgcmVjaGFyZ2UuY29tL2Jsb2cg4oCUIE1hZGRlbiBORkwgMjcgbGF1bmNoIHJhdGluZ3MnKTsKICAgIHJldHVybiBsaW5lcy5qb2luKCdcbicpOwogIH0KICB2YXIgY29weVRpbWVyID0gMDsKICBmdW5jdGlvbiBjb3BpZWRTdGF0ZSgpewogICAgY29weUJ0bi50ZXh0Q29udGVudCA9ICdDb3BpZWQg4pyTJzsKICAgIGNvcHlCdG4uY2xhc3NMaXN0LmFkZCgncmN3LW1kc2Itb2tiJyk7CiAgICBjbGVhclRpbWVvdXQoY29weVRpbWVyKTsKICAgIGNvcHlUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgY29weUJ0bi50ZXh0Q29udGVudCA9ICdDb3B5IGxpbmV1cCc7CiAgICAgIGNvcHlCdG4uY2xhc3NMaXN0LnJlbW92ZSgncmN3LW1kc2Itb2tiJyk7CiAgICB9LCAyMDAwKTsKICB9CiAgZnVuY3Rpb24gY29weUZhbGxiYWNrKHR4dCl7CiAgICB0cnkgewogICAgICB2YXIgdGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpOwogICAgICB0YS52YWx1ZSA9IHR4dDsKICAgICAgdGEuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICcnKTsKICAgICAgdGEuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnOyB0YS5zdHlsZS5sZWZ0ID0gJy05OTk5cHgnOyB0YS5zdHlsZS50b3AgPSAnMCc7CiAgICAgIHJvb3QuYXBwZW5kQ2hpbGQodGEpOwogICAgICB0YS5zZWxlY3QoKTsKICAgICAgdGEuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgdHh0Lmxlbmd0aCk7CiAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7CiAgICAgIHJvb3QucmVtb3ZlQ2hpbGQodGEpOwogICAgICBjb3BpZWRTdGF0ZSgpOwogICAgfSBjYXRjaCAoZSkge30KICB9CiAgZnVuY3Rpb24gZG9Db3B5KCl7CiAgICB2YXIgdHh0ID0gbGluZXVwVGV4dCgpOwogICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQpewogICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0eHQpLnRoZW4oY29waWVkU3RhdGUsIGZ1bmN0aW9uKCl7IGNvcHlGYWxsYmFjayh0eHQpOyB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGNvcHlGYWxsYmFjayh0eHQpOwogICAgfQogIH0KCiAgdmFyIHJlc2V0QXJtZWQgPSBmYWxzZSwgcmVzZXRUaW1lciA9IDA7CiAgZnVuY3Rpb24gZGlzYXJtUmVzZXQoKXsKICAgIHJlc2V0QXJtZWQgPSBmYWxzZTsKICAgIHJlc2V0QnRuLnRleHRDb250ZW50ID0gJ1Jlc2V0IGxpbmV1cCc7CiAgICByZXNldEJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdyY3ctbWRzYi1kYW5nZXJiJyk7CiAgfQogIHJlc2V0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgIGlmICghcmVzZXRBcm1lZCl7CiAgICAgIHJlc2V0QXJtZWQgPSB0cnVlOwogICAgICByZXNldEJ0bi50ZXh0Q29udGVudCA9ICdUYXAgYWdhaW4gdG8gY29uZmlybSc7CiAgICAgIHJlc2V0QnRuLmNsYXNzTGlzdC5hZGQoJ3Jjdy1tZHNiLWRhbmdlcmInKTsKICAgICAgY2xlYXJUaW1lb3V0KHJlc2V0VGltZXIpOwogICAgICByZXNldFRpbWVyID0gc2V0VGltZW91dChkaXNhcm1SZXNldCwgMzAwMCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNsZWFyVGltZW91dChyZXNldFRpbWVyKTsKICAgIGRpc2FybVJlc2V0KCk7CiAgICB2YXIgaTsKICAgIGZvciAoaSA9IDA7IGkgPCBzdGF0ZS5zbG90cy5sZW5ndGg7IGkrKykgc3RhdGUuc2xvdHNbaV0ucGxheWVyID0gbnVsbDsKICAgIHN0YXRlLnBlbmRpbmcgPSBudWxsOwogICAgc3RhdGUuc2VsZWN0ZWQgPSAtMTsKICAgIHJlbmRlckFsbCgpOwogICAgY2xvc2VQYW5lbChmYWxzZSk7CiAgfSk7CgogIGZpbGxCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhdXRvRmlsbCk7CiAgY29weUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGRvQ29weSk7CiAgc2VsRWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oKXsgYXBwbHlGb3JtYXRpb24oc2VsRWwudmFsdWUpOyB9KTsKICBjbG9zZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGNsb3NlUGFuZWwodHJ1ZSk7IH0pOwogIGJhY2tkcm9wLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgY2xvc2VQYW5lbCh0cnVlKTsgfSk7CiAgcmVtb3ZlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgIHZhciBpID0gc3RhdGUucGlja0luZGV4OwogICAgaWYgKGkgPCAwKSByZXR1cm47CiAgICBzdGF0ZS5zbG90c1tpXS5wbGF5ZXIgPSBudWxsOwogICAgaWYgKHN0YXRlLnNlbGVjdGVkID09PSBpKSBzdGF0ZS5zZWxlY3RlZCA9IC0xOwogICAgcmVuZGVyQWxsKCk7CiAgICBjbG9zZVBhbmVsKHRydWUpOwogIH0pOwogIHNlYXJjaEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKXsKICAgIHN0YXRlLnF1ZXJ5ID0gbm9ybShzZWFyY2hFbC52YWx1ZSk7CiAgICByZW5kZXJQYW5lbExpc3QoKTsKICB9KTsKICB0ZWFtRWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oKXsKICAgIHN0YXRlLnRlYW0gPSB0ZWFtRWwudmFsdWU7CiAgICByZW5kZXJQYW5lbExpc3QoKTsKICB9KTsKICB0b2dFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICBzdGF0ZS5hbGxQb3MgPSAhc3RhdGUuYWxsUG9zOwogICAgdG9nRWwuc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCBzdGF0ZS5hbGxQb3MgPyAndHJ1ZScgOiAnZmFsc2UnKTsKICAgIHJlbmRlclBhbmVsTGlzdCgpOwogIH0pOwogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihldil7CiAgICBpZiAoKGV2LmtleSA9PT0gJ0VzY2FwZScgfHwgZXYua2V5ID09PSAnRXNjJykgJiYgc3RhdGUucGlja0luZGV4ID49IDApIGNsb3NlUGFuZWwodHJ1ZSk7CiAgfSk7CgogIHN0YXRlLnNsb3RzID0gYnVpbGRTbG90cyhzdGF0ZS5mb3JtYXRpb24pOwogIHJlc3RvcmUoKTsKICBzZWxFbC52YWx1ZSA9IHN0YXRlLmZvcm1hdGlvbjsKICByZW5kZXJBbGwoKTsKICAvKiBUaGUgZm9vdGVyIHByaW50cyB0aGUgY2FwdHVyZSBkYXRlLCB3aGljaCBvdGhlcndpc2Ugb25seSBhcnJpdmVzIHdpdGggdGhlIGRhdGEuICovCiAgaWYgKHVwZEVsICYmICF1cGRFbC50ZXh0Q29udGVudCkgdXBkRWwudGV4dENvbnRlbnQgPSBSQ1dfQ0FQVFVSRUQ7CiAgaWYgKHN0YXRlLnBlbmRpbmcgJiYgJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpewogICAgdmFyIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGVuKXsKICAgICAgdmFyIGs7CiAgICAgIGZvciAoayA9IDA7IGsgPCBlbi5sZW5ndGg7IGsrKyl7CiAgICAgICAgaWYgKGVuW2tdLmlzSW50ZXJzZWN0aW5nKXsgaW8uZGlzY29ubmVjdCgpOyBsb2FkRGF0YSgpOyBicmVhazsgfQogICAgICB9CiAgICB9LCB7IHJvb3RNYXJnaW46ICc2MDBweCAwcHgnIH0pOwogICAgaW8ub2JzZXJ2ZShyb290KTsKICB9Cn0pKCk7Cg==\"),function(c){return c.charCodeAt(0)})))<\/script>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-how-it-works\">How the builder works<\/h2>\n\n\n\n<p>Nine personnel groupings, eleven slots each \u2014 five offensive, three defensive and one special teams:<\/p>\n\n\n\n<div style=\"overflow-x:auto\"><table style=\"width:100%;border-collapse:collapse;min-width:520px;font-size:.96em\"><thead><tr><th style=\"text-align:left;padding:10px 12px;border-bottom:2px solid #111\">Grouping<\/th><th style=\"text-align:left;padding:10px 12px;border-bottom:2px solid #111\">What it is for<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Offense \u2014 Singleback<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">The balanced base look: one back, three receivers, a tight end<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Offense \u2014 I-Form<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Fullback ahead of the halfback \u2014 the power running set<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Offense \u2014 Shotgun 4WR<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Four receivers spread wide, quarterback in the gun<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Offense \u2014 Pistol<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Quarterback short of shotgun depth, back directly behind him<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Offense \u2014 Goal Line<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Three tight ends and a fullback \u2014 short yardage, heavy personnel<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Defense \u2014 4-3<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Four down linemen, three linebackers, the standard front<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Defense \u2014 Nickel<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">A linebacker swapped for a third corner against the pass<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Defense \u2014 Dime<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Two linebackers swapped out, four corners on the field<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Special Teams<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Kicker, punter, long snapper and the coverage unit<\/td><\/tr><\/tbody><\/table><\/div>\n\n\n\n<p>Slots accept their own position first, then close cousins \u2014 edge rushers flip sides, linebackers rotate between Mike, Will and Sam, guards and tackles mirror left to right. Put a player somewhere he does not belong and the slot flags it with an <strong>OOP<\/strong> badge, and the out-of-position counter goes up. Nothing stops you doing it; the builder just will not pretend it is a real lineup.<\/p>\n\n\n\n<p><strong>Auto-fill best<\/strong> drops the highest rated available player into every empty slot without repeating anyone, which is the fastest way to see what a theoretical best-in-league unit looks like. <strong>Star power<\/strong> counts the X-Factor and Superstar abilities across your eleven.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-attributes\">Every player shows the attributes that matter at his position<\/h2>\n\n\n\n<p>Tap a filled slot and the card underneath shows that player\u2019s key attributes \u2014 not a generic six, but the ones that actually separate his position from the rest of the league. A quarterback shows throw accuracy and play action; a receiver shows route running and release; a left tackle shows pass and run blocking; a corner shows press and coverage.<\/p>\n\n\n\n<p>Those lists are not hand-picked to look good. For every position we compared its average in each of EA\u2019s attributes against the league-wide average across all 3,111 players, and kept the attributes that genuinely stand out. Where nothing stands out, nothing is shown \u2014 kickers and punters get kick power and kick accuracy and no filler, and long snappers get almost nothing, because EA does not publish attributes that meaningfully separate a long snapper from anyone else.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-ratings\">What the ratings actually are<\/h2>\n\n\n\n<p>These are EA\u2019s <strong>Launch Ratings<\/strong> \u2014 the single iteration EA has published so far for Madden NFL 27. They are the numbers the game shipped with.<\/p>\n\n\n\n<p>EA stores <strong>55 separate attributes<\/strong> per player, and which ones matter depends entirely on the position. A quarterback lives on throw power and the three throw-accuracy ratings; a receiver on route running, catching and release; an offensive lineman on pass block and run block; a corner on press and man coverage. That is why a 99 at one position and a 99 at another are not the same achievement.<\/p>\n\n\n\n<div style=\"overflow-x:auto\"><table style=\"width:100%;border-collapse:collapse;min-width:520px;font-size:.96em\"><thead><tr><th style=\"text-align:left;padding:10px 12px;border-bottom:2px solid #111\">Position<\/th><th style=\"text-align:left;padding:10px 12px;border-bottom:2px solid #111\">The attributes that separate them<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">QB<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Throw accuracy (short, mid, deep), throw power, play action, throw under pressure<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">HB<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Break tackle, carrying, trucking, juke move, ball carrier vision<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">WR<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Deep \/ medium \/ short route running, release, catch in traffic, spectacular catch<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">TE<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Release, catch in traffic, short route running, run blocking<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">OL (LT\/LG\/C\/RG\/RT)<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Pass block power and finesse, run block power and finesse, lead block<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">DT \/ EDGE<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Power moves, finesse moves, block shedding, tackle, hit power<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">LB (Mike\/Will\/Sam)<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Tackle, hit power, pursuit, play recognition, zone coverage<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">CB \/ S<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Press, man coverage, zone coverage, play recognition<\/td><\/tr><tr><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">K \/ P<\/td><td style=\"padding:9px 12px;border-bottom:1px solid #e6e6e6\">Kick power and kick accuracy \u2014 and almost nothing else<\/td><\/tr><\/tbody><\/table><\/div><p style=\"font-size:.88em;color:#666;margin:6px 0 0\">Derived from the spread between each position\u2019s average and the league average across all 3,111 players.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-free-agents\">Free agents are in the pool<\/h2>\n\n\n\n<p>1,240 of the 3,111 players in EA\u2019s database have no team attached. These are not filler \u2014 they include genuinely rated veterans, several in the high 80s. They are in the picker, labelled <strong>Free agent<\/strong>, because leaving them out would hide some of the best available players at their positions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-limits\">What this tool does not do<\/h2>\n\n\n\n<p><strong>No Ultimate Team pricing.<\/strong> EA\u2019s public ratings database contains no coin or point values, so there is no &#8220;cheapest&#8221; or &#8220;best value&#8221; view here. Anything quoted as a MUT price elsewhere is somebody\u2019s estimate, not EA data.<\/p>\n\n\n\n<p><strong>No roster updates yet.<\/strong> EA has published exactly one iteration \u2014 Launch Ratings. When in-season adjustments appear in the public database, this page picks them up automatically; until then it deliberately shows only the launch numbers rather than guessing at what changed.<\/p>\n\n\n\n<p><strong>No scheme or playbook advice.<\/strong> This is a ratings tool. Which scheme suits your personnel is a football question, and EA\u2019s ratings data does not answer it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-data-source\">Where the data comes from<\/h2>\n\n\n\n<p>EA publishes the Madden NFL 27 ratings openly and we capture the complete set rather than a curated top list \u2014 every player at every position, including kickers, punters and long snappers, which is why you can fill a special teams unit properly.<\/p>\n\n\n\n<p>Portraits and team crests come from EA\u2019s own asset servers. Where EA has not published a portrait \u2014 124 players, all outside the top 900 \u2014 the builder shows initials rather than a placeholder body shot.<\/p>\n\n\n\n<div style=\"background:#00373D;border-radius:14px;padding:22px 24px;margin:26px 0\"><h2 style=\"margin:0 0 8px;color:#FFB627!important;font-size:20px;font-weight:800\">Topping up for Madden 27<\/h2><p style=\"margin:0 0 14px;color:#F2FBF7;font-size:15px;line-height:1.5\">Madden NFL 27 and everything inside it \u2014 Ultimate Team points, the game itself \u2014 is bought through the store on your platform, and those stores run on your account balance. Recharge.com sells that balance, delivered by email in minutes.<\/p><p style=\"margin:0;color:#F2FBF7;font-size:15px;line-height:1.9\"><strong style=\"color:#FFB627\">PlayStation:<\/strong> <a href=\"https:\/\/www.recharge.com\/en\/us\/playstation-store\">PlayStation Store gift card<\/a> \u00b7 <a href=\"https:\/\/www.recharge.com\/en\/us\/playstation-plus\">PlayStation Plus<\/a><br><strong style=\"color:#FFB627\">Xbox:<\/strong> <a href=\"https:\/\/www.recharge.com\/en\/us\/xbox-gift-card\">Xbox gift card<\/a> \u00b7 <a href=\"https:\/\/www.recharge.com\/en\/us\/xbox-game-pass\">Xbox Game Pass<\/a><br><strong style=\"color:#FFB627\">PC:<\/strong> <a href=\"https:\/\/www.recharge.com\/en\/us\/steam\">Steam gift card<\/a><\/p><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-madden-faq\">Madden NFL 27 ratings FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">How many players are in Madden NFL 27?<\/h3>\n\n\n\n<p>EA\u2019s published launch ratings database contains 3,111 players \u2014 1,240 of them free agents with no team attached. All of them are in the builder above.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Who are the 99 overall players in Madden 27?<\/h3>\n\n\n\n<p>Six players launched at 99: Ja\u2019Marr Chase and Jaxon Smith-Njigba at receiver, Josh Allen and Matthew Stafford at quarterback, Myles Garrett at edge and Trey McBride at tight end. Search any of them in the builder to see their full attribute spread.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What do the 55 attributes mean?<\/h3>\n\n\n\n<p>EA rates every player across 55 attributes, but only a handful matter per position \u2014 throw accuracy for quarterbacks, route running for receivers, pass block for linemen, man and zone coverage for defensive backs. The table above lists which ones separate each position.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Does this show Ultimate Team prices?<\/h3>\n\n\n\n<p>No. Coin and point values are not part of EA\u2019s published ratings data, so we do not show a market value for any card.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Are these ratings updated during the season?<\/h3>\n\n\n\n<p>EA has published one iteration so far \u2014 Launch Ratings. This page reads EA\u2019s public database directly, so in-season adjustments appear here automatically once EA publishes them. We do not estimate changes in advance.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I save my lineup?<\/h3>\n\n\n\n<p>Yes. It saves in your own browser automatically, so closing the tab does not lose it. There is no account and nothing is uploaded. &#8220;Copy lineup&#8221; gives you a plain-text version to paste anywhere.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why are some players marked out of position?<\/h3>\n\n\n\n<p>Each slot accepts its own position plus close equivalents \u2014 edges flip sides, linebackers rotate, guards and tackles mirror. Anything further out still goes in the slot, but gets flagged and counted, so your average overall is never quietly flattering.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-more-madden\">More Madden NFL 27 tools<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-ratings-database\">Madden NFL 27 ratings database<\/a><\/li><li><a href=\"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-player-comparison\">Madden NFL 27 player comparison<\/a><\/li><li><a href=\"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-team-rankings\">Madden NFL 27 team power rankings<\/a><\/li><\/ul>\n\n\n\n<p><em>Unofficial fan content by Recharge.com \u2014 not affiliated with or endorsed by EA SPORTS, the NFL or the NFLPA. Ratings come from EA\u2019s public Madden NFL 27 ratings database, captured 14 September 2026. We publish the ratings EA publishes: we do not adjust them, and where EA has not published a field we leave it out rather than estimate it.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Build a Madden NFL 27 lineup from EA\u2019s full launch ratings \u2014 all 3,111 players, offense, defense and special teams. Pick a personnel grouping, fill every slot and see your average overall update live.<\/p>\n","protected":false},"author":49,"featured_media":52181,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"cos_headline_score":0,"cos_seo_score":0,"cos_headline_text":"","cos_headline_has_been_analyzed":false,"cos_last_analyzed_headline":[],"_hreflang_tags":"","footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[23],"tags":[],"class_list":["post-51950","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-digital-lifestyle-old"],"jetpack_publicize_connections":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.4 (Yoast SEO v21.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Madden NFL 27 Squad Builder: Build a Lineup From All 3,111 Players<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Madden NFL 27 Squad Builder: Build a Lineup From All 3,111 Players\" \/>\n<meta property=\"og:description\" content=\"Build a Madden NFL 27 lineup from EA\u2019s full launch ratings \u2014 all 3,111 players, offense, defense and special teams. Pick a personnel grouping, fill every slot and see your average overall update live.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder\" \/>\n<meta property=\"og:site_name\" content=\"Recharge Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-14T08:21:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-14T11:07:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/creativegroup-blog-prd-eu-west-1-recharge-blog.s3.eu-west-1.amazonaws.com\/blog\/wp-content\/uploads\/2026\/09\/14101927\/fc27-md-squad-hero.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"1000\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Conor Byrne\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder\",\"url\":\"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder\",\"name\":\"Madden NFL 27 Squad Builder: Build a Lineup From All 3,111 Players\",\"isPartOf\":{\"@id\":\"https:\/\/www.recharge.com\/blog\/en-gb\/#website\"},\"datePublished\":\"2026-09-14T08:21:38+00:00\",\"dateModified\":\"2026-09-14T11:07:51+00:00\",\"author\":{\"@id\":\"https:\/\/www.recharge.com\/blog\/en-gb\/#\/schema\/person\/857508b94164c3cdc1f206b5c30d31a6\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.recharge.com\/blog\/en-gb\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Madden NFL 27 Squad Builder: Build a Lineup From All 3,111 Players\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.recharge.com\/blog\/en-gb\/#website\",\"url\":\"https:\/\/www.recharge.com\/blog\/en-gb\/\",\"name\":\"Recharge Blog\",\"description\":\"Everything about online safety, smart spending &amp; your digital lifestyle.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.recharge.com\/blog\/en-gb\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.recharge.com\/blog\/en-gb\/#\/schema\/person\/857508b94164c3cdc1f206b5c30d31a6\",\"name\":\"Conor Byrne\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.recharge.com\/blog\/en-gb\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/624bd2d0a75e67e81c16920493bcda346cb5cfd0f77cfdff3a72413de0254eeb?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/624bd2d0a75e67e81c16920493bcda346cb5cfd0f77cfdff3a72413de0254eeb?s=96&d=mm&r=g\",\"caption\":\"Conor Byrne\"},\"description\":\"My passion for the e-commerce and fintech space started years ago with my first gaming console, giving me firsthand experience with the world of digital credit and top-ups. As a blog copywriter here at Recharge.com, I now get to use that insight to create clear, helpful content that makes navigating gift cards and online payments a breeze for our community.\",\"url\":\"https:\/\/www.recharge.com\/blog\/en-gb\/author\/conor-byrne\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Madden NFL 27 Squad Builder: Build a Lineup From All 3,111 Players","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder","og_locale":"en_GB","og_type":"article","og_title":"Madden NFL 27 Squad Builder: Build a Lineup From All 3,111 Players","og_description":"Build a Madden NFL 27 lineup from EA\u2019s full launch ratings \u2014 all 3,111 players, offense, defense and special teams. Pick a personnel grouping, fill every slot and see your average overall update live.","og_url":"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder","og_site_name":"Recharge Blog","article_published_time":"2026-09-14T08:21:38+00:00","article_modified_time":"2026-09-14T11:07:51+00:00","og_image":[{"width":1500,"height":1000,"url":"https:\/\/creativegroup-blog-prd-eu-west-1-recharge-blog.s3.eu-west-1.amazonaws.com\/blog\/wp-content\/uploads\/2026\/09\/14101927\/fc27-md-squad-hero.jpg","type":"image\/jpeg"}],"author":"Conor Byrne","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder","url":"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder","name":"Madden NFL 27 Squad Builder: Build a Lineup From All 3,111 Players","isPartOf":{"@id":"https:\/\/www.recharge.com\/blog\/en-gb\/#website"},"datePublished":"2026-09-14T08:21:38+00:00","dateModified":"2026-09-14T11:07:51+00:00","author":{"@id":"https:\/\/www.recharge.com\/blog\/en-gb\/#\/schema\/person\/857508b94164c3cdc1f206b5c30d31a6"},"breadcrumb":{"@id":"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.recharge.com\/blog\/en-gb\/madden-27-squad-builder#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.recharge.com\/blog\/en-gb"},{"@type":"ListItem","position":2,"name":"Madden NFL 27 Squad Builder: Build a Lineup From All 3,111 Players"}]},{"@type":"WebSite","@id":"https:\/\/www.recharge.com\/blog\/en-gb\/#website","url":"https:\/\/www.recharge.com\/blog\/en-gb\/","name":"Recharge Blog","description":"Everything about online safety, smart spending &amp; your digital lifestyle.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.recharge.com\/blog\/en-gb\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/www.recharge.com\/blog\/en-gb\/#\/schema\/person\/857508b94164c3cdc1f206b5c30d31a6","name":"Conor Byrne","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.recharge.com\/blog\/en-gb\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/624bd2d0a75e67e81c16920493bcda346cb5cfd0f77cfdff3a72413de0254eeb?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/624bd2d0a75e67e81c16920493bcda346cb5cfd0f77cfdff3a72413de0254eeb?s=96&d=mm&r=g","caption":"Conor Byrne"},"description":"My passion for the e-commerce and fintech space started years ago with my first gaming console, giving me firsthand experience with the world of digital credit and top-ups. As a blog copywriter here at Recharge.com, I now get to use that insight to create clear, helpful content that makes navigating gift cards and online payments a breeze for our community.","url":"https:\/\/www.recharge.com\/blog\/en-gb\/author\/conor-byrne"}]}},"jetpack_featured_media_url":"https:\/\/creativegroup-blog-prd-eu-west-1-recharge-blog.s3.eu-west-1.amazonaws.com\/blog\/wp-content\/uploads\/2026\/09\/14130735\/fc27-md-squad-hero-1.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.recharge.com\/blog\/en-gb\/wp-json\/wp\/v2\/posts\/51950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.recharge.com\/blog\/en-gb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.recharge.com\/blog\/en-gb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.recharge.com\/blog\/en-gb\/wp-json\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.recharge.com\/blog\/en-gb\/wp-json\/wp\/v2\/comments?post=51950"}],"version-history":[{"count":4,"href":"https:\/\/www.recharge.com\/blog\/en-gb\/wp-json\/wp\/v2\/posts\/51950\/revisions"}],"predecessor-version":[{"id":52113,"href":"https:\/\/www.recharge.com\/blog\/en-gb\/wp-json\/wp\/v2\/posts\/51950\/revisions\/52113"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.recharge.com\/blog\/en-gb\/wp-json\/wp\/v2\/media\/52181"}],"wp:attachment":[{"href":"https:\/\/www.recharge.com\/blog\/en-gb\/wp-json\/wp\/v2\/media?parent=51950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.recharge.com\/blog\/en-gb\/wp-json\/wp\/v2\/categories?post=51950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.recharge.com\/blog\/en-gb\/wp-json\/wp\/v2\/tags?post=51950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}