roles/nginx: Ingenius use of YAML hashes to derive TLS key from another file

This is kinda crazy, but makes the host_vars much easier to read.

Signed-off-by: Alan Orth <alan.orth@gmail.com>
This commit is contained in:
Alan Orth 2014-10-11 15:42:03 +03:00
parent 7ad41df199
commit 59b9bd70b8
2 changed files with 366 additions and 1 deletions

View File

@ -6,10 +6,21 @@
notify: notify:
- reload nginx - reload nginx
# Chained TLS keys for all domains in one file, like:
#
# domain.com:
# tls_cert: |
# -----BEGIN PRIVATE KEY-----
# MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDeIotVB7/WY9sJ
- name: Get TLS certs
include_vars: "../../../vars/tls_keys.yml"
# Loop through tls vhosts and derive var to pull cert from (see above)
#
# concatenated key + cert, can live in the same file # concatenated key + cert, can live in the same file
# See: http://nginx.org/en/docs/http/configuring_https_servers.html # See: http://nginx.org/en/docs/http/configuring_https_servers.html
- name: Copy TLS certs - name: Copy TLS certs
copy: { dest: "{{ tls_key_dir }}/{{ item.nginx_domain_name }}.crt.pem", content: "{{ item.tls_cert }}", mode: 0700, owner: 'root', group: 'root' } copy: { dest: "{{ tls_key_dir }}/{{ item.nginx_domain_name }}.crt.pem", content: "{{ {{ item.nginx_domain_name }}.{{ tls_cert }} }}", mode: 0700, owner: 'root', group: 'root' }
with_items: nginx_tls_vhosts with_items: nginx_tls_vhosts
notify: notify:
- reload nginx - reload nginx

354
vars/tls_keys.yml Normal file
View File

@ -0,0 +1,354 @@
$ANSIBLE_VAULT;1.1;AES256
34626561353433626430653761313433613766386534643166323964663833653531373338393832
3531656262373930376465623034656265663362323130350a316466323636666534323336396264
37383663613563353337326236396564363537356133303830666364653461363635313165613938
6431373664653362310a353534636362333261346365343634373337353363613637626133613734
66356439613164666331623466396235393764613135356136643265626330303066343331623734
30626335656635316237393931386632616134333166663930326365376463623630376539323634
33333964366366386635363165643830633862663839623332313435343436396362376262356262
64653630353235396334373564313561633836316132346336383531393633373837393263613138
37343766373731316162333630303637643830393866636265633032323863326665653063653739
63626463663137366138333866353065363161353034643837613635323465613038313432653864
31353831613334326133333033346337336662336361386664343937306163393465666538373863
61366263623666393031356438306233333232636137653164346262393536373061306231353263
62383732323738613835653662343465643835376164393861616138373165373764383639656334
64373030623331636332306239373332663539393032643733326638666135666434653134373332
39663639633163623339316532303733306134333037623439396430643731626266663964366563
65613135326637396635653032353861623166333637646233643539396665393861316437653064
33636461343037313665356136303635323237363233313730623738333039313335376262353932
65343732313365623936653235336432383937653162313365323232323633353930323334636365
66353030386437653134363437623262613031653664396435306662326132366664376534306333
65323763613431373330653339663865656534356533663832356661393533626666316236343130
66303965393066333437653839646230383731663362366231353131623562666536343463623631
30633862643935313966313362653932623931663133656531663232643937386263316431613562
30613262303336396637363664326332653465643630336235306666646362376133363633633034
31356439313930333163306265613066386366633664363762656131386237303931376230323137
64623732353962333430346636393231353534643861313839616133613532353035616363336434
36653133653734373734653534303532396431663837626338633630363631333563383561626437
33333231376534353265326131393866306466363264613133616637636561323731666662626233
38316238343862303139306432383737626532323337313965633462383064663830616265356461
61393561306262306562376361626531623162313237346231663534626430616639613166383464
33616633316333663332396239633333393530663334306564346431333561323637336563643633
65323331666134346130356133666266316136393861306631383762303830386238653564613565
65376335393130373638633966653838396232326163383034613133646439666239323033353036
36346461653739303261336133333764613961373637346664346233643431616232333036653335
30316662616335353333616332393333336466613336316333323332316565336664306336373936
36666362303562663763633365643837353433393833313838663834653936616464383435356265
34373730363062346461303063336337366636353562373163323638356330353165663136636132
63323637623936343463363536656333353336306130646165383562386463626164303836316238
38393635663362356633643230656636356237653232643837663061663139366636333735663561
33303864636433303538623635383935396163623862623630626463636637613737383730373439
30373737363863646332346435646461636231306466323137353464313862346362396431323963
39663839353437646132316636346639643439373334616166383634666636623063653436636266
39333661343465333663366631316133613536613635633534326637643461306663633963333933
32313930643864366465383737643636323462356164623066363533373137613835613233396136
63643534633638363263316266653766313661316438623436643635373834666630333231656531
31323433303935343135393234333465313663346135353130333563376363323366653861356463
37333938316239623962363336353665306634343863326231386536313836303534633533643239
66346164393635306336336661383439616466633136373739346432353935646333363230653236
35303665663437326234353030663866303237633031343238346232313031313536346237386338
31626262626463613235326432386362386134613438313131613035333566366637653766376337
34643835643031623561613066343832356239663231663338616638643036646433396564373738
36313261386335373964323366643063336632663864303662383739386538376362386163643365
62653566626464636530356230636338306166613330653163623164313536303566653638663261
62373931383032396331306461333262313630626436333464653963333162613366376231343531
30333437383831396438343463663561333131396166653638303563393661373534303664393639
33336130613333333936643934326331643165633361376336346430653434643066366430373237
32363936353438336630623162623266616638343836623063333562393366623164643363316463
36376431383765393965643139326361663965653839613032666134626234616665333433376566
64346364366163656361373439373831663165393565363332653265393236653838376334323735
38313336303466303736343731323935323661636561633134346337353964396561336561316465
33303763656636353261616434666433326530326466376137613863613637303034646439323433
66313535616534333561383765386339633239316230326565363833323435373437623532623935
63386431373765313939663238323437333362336437396466633735356636313262653033306439
63303138653130333333383236616465666531663265333531366131653432393362366666376264
30303461616663313936633330303065653039373236303436663861336363613466363730356132
66373830633034336366323763623637396337646434333666353739623732346565313032653336
36613039373235653465363065323139646133353133616532393430623966646132343231363135
37313034303662333733383661646166356162623535656533616339633036303833653933396662
61613061663937653732633139633735393965356135626432303962303036643638616164383963
31363239386237616433313366386536323932653233333461646239653563343037363166373931
61376634323239666263303666303365616130376162663262333231396661643637333463633439
31303938646336623262396465303234323033376238653738613164653033393234316662363137
31373935633031373232643337623830303537376236333335633336386239646130613337336434
32333937333533363363313562306431393833366361323635613337646164363430386230663238
61333539366265656430393761363561653839326633373361393736613433663562373234363630
34616535326361306435333930393064383265396163663034346264623862353134303637646432
39393338613331613464336666663934656431386135616134343731333932393961383834373835
36623138663935336530653264666565306635633764383064643461303030303061663938323638
33613834383536386262623464656163303661326334666231336435373738306663643339316233
30336535386465323261653637353638303331336237623166623330393934376366396166636562
38363738616432366332613131343539376331333234363737613038366132313666356566383261
39613237656461343837323663656132636235643537623835356530613332336537343838323766
64363333353364623832316233633866613838353632316634336134363630313161396633366534
62643030356561636338666532333531613833633065323238306565643866333832303934333632
36653335346534353863376634653561393962353362306332636339643536663039353936373739
30656130663264366236396236656166343465643563306563636234653134663331353465386464
63623337386662613235326439366536636438653337633433393466373961373235343038366535
63316236633065336431353531383362303063376330386537626136356137636232656633306165
30616564376366306562616137613364333061626461386630636134376330303831373163653332
66386166386465303162373834636662336132356332316163633463326335336233663665643563
63663432323833326565373831313838373164303230383664363665663964636135336361633539
61363831333131626430326332363237323061643538323332333539656365626239613332373865
30646633386532623439313737663261366335363938623366663363356436636238623964316131
36626236653062326134393630613139323536663866643162336462643761313134346638383166
38616362623335633865396338326638353830636532303539666439633733396466636331663136
65653566393235313263626237663031383662346630313838386437336232393234313037623362
31396330303336376364353439346434333064366436326461646666386234376533326262326237
37326333306166646531386262303965646565336639316638396661653338346235616631656230
66303864306137373536343437313661656166623633656263323263323536623336333238343833
38353162653434363065373331373231613639356466363664343135653434323365306266373839
35323436376361396233353432306539386464616536653232633037643132643563653938373731
39656165313333663939613161646561346461653538386563333032666235653966386635666139
62386237613163386265323065623333646631393333393363393763326465383638663564386365
66616131383266633063306234323739396164363766353239353736623336633439383835373665
35303038656138333838366230643463316266393537366633303562343462323731636139363463
63336432643730306232643833353763356437373933313765346164376663313834313539313866
31636532363431646332303131396239343464323466623138363663363261303137666539623534
61376437663464663132393633653833383263353231396464343033633234396261366139303234
34363363326339336666376262343664386364366634343166623639353066376263336231373035
63626438336637633132333765353737353332303965313834376533373766626434626538366439
33646165623561373836363430653536396332353933373534353138346331376364346137356535
63646430626164303430313734313730633163303762613266343937623461393262623138386136
36613235636330616439333138356532326565626561663565366362626236623761356132396561
32643764366437383962343438306330393736626162643937363066343130313932363631633534
63653437376435373131333338343131643364346164373630306139323031643766373866313131
66613233663631626361373161666231626637633561363964316233663165396230363831373233
64386535656134343930306363353234613931323539393633623936653266626239643361616663
63616363333236336530353231303561316538333964643132306230333336323064353064616130
33313965643637333332613233653033326236303864376363393634303865366236336439646434
62336437396539393464323862396431396331346465643535306634333866666233383337383537
63626232336366393661633038656230323264386137613366393937363766613636393334343935
33333536636130393038306362303364376264663632383835313961316634333439613233363933
65393362336336393665353064313163393633393333616638356339333263633334326265626238
36343734393837366565613732323765383330356435346364313535343033613438383366663230
38633362653435323837326465636266343464396431623161326463363038623561363861323261
62393536666139376461353334376561303934663637313137343437396166363037623336353038
64613131653230366537353164323763316333633766353665626331323737326239323435616535
37353161346163613832666264313764303632376532613063383438373936656434656161353330
63373837636239626262636430386337363165313134323063306634626336383861383030336135
62616663356438333563343736643964653139656334353538663736373137383539646130386362
34396163306637633930353936663865353162306435383337666233613330313739396563343035
32646630306262653537383763626130316663666561666234646263306637653038383230333936
61656338373366663232383631633630313830363564303630316638636337613237626232643537
30633566393737363434636330363232353032323232626166616262396533326238353233623732
31643037386135626636363634383034306262343139373438316239636338643162386336333535
36643263303830653865353631303131653835333238303931666535363066376237653766356639
37353065336333343962643337373765623231393461623435303632323239656465333661376136
34383363363532333663343033323064633734633632373534656338306564326332616331653634
63366537643162303730373333373039336230366266346261323164383564313531656337623063
61653764333864626663623633386266663230633035643462623563346530316431646338356131
37386665643831383665643365306431393539393234636662323938316330343762346637366539
65663966386332333033646338376130353262363165396336386335346230373564316331396362
39626232666637623739626263636166323930663530313361623462643530376630363134363038
65656133633337306333653064616234623936623132623032623435616437346231666230316238
64373030656634393132393761656163633566643063343466393833663962343939323635373330
34393164626230363239366564333935356435313530663333646362376436383238626662333863
34663538643962613163626562636535616530336434386130303436306664393531646630373735
38393438383863633738663365313262333661316231366232643662316338303761303966316662
35343336396534343136383330306134663333646432353234313931383764373161336339643332
65333366306462666330356563303837396566636262326631353336326236326664616132646533
30643963613661396231323561333931343533636639366236346534383364386264636336666562
30343837326636666436343234376530623664366630623466363763333838333062386339313964
63303966343561333263373038366337666137656235396333356630323562326161386661636361
37646562393730653031313061326537316436356334333732666636383533373538363564653761
66393231323031316631373937626165633365313132653135613537656538376339306238306161
39353161373931303930316331363964663330633837613363363631383263636539383530336334
35323566306466366131393031376133383763346461373237313232363230643532366438366433
30363338353764326366343435306562643665373239363738623635333365636332343031336434
65666130646430623164303961333431303764333266316136396438313831316139303861313736
37343835396362373630383765653037313538633132623965393433633966616335346230396535
33323662323933616633303536323631346666383565383166643133626262623531383132343865
36616561393164623465343162636230633832323235386632643439376666313938613565643133
38633734613265313563303235346165303034353636366461656261386264303131313432343639
65666131373866663037336561626236343733623831373239343561323538303963663831616635
37623865663863303637656164333866376666356339353833323839326232303933366464346562
39393366333931356135366266346338303430626362316135653964346261643232316533373834
31643732303734636365623034653163383739623364333533346534653631313731613765383334
32653632303437396135636662656138333136656333646634323632663466643364396261653239
64373662613165623563653632336137643035373435343931656230656264663130356363653830
33396136613031666338633663373038636431656230363261316139643266366363303765643364
35316433366262376664376236393361366437623830366631393738383266373337366538633836
31626438376435613831396566613265656535373266303838633366663161326138643434616433
66346438633536386637353435373036623132306236373735653639383838653261613736306338
38303163316431663465383333396561646461643234653066383339666666646532326365636137
66386136346135633362643062353837613630613462363566663461383361346336333138656430
39623330623337663231623833333366636332336338613232303338393361636566636238323965
64333063653732393435323331313039386438646137626130666634306461313663336435383462
61636330356131616363616237653662666364356138643734323237356335343264643034343066
62633339343638646335343762373230616263663565633830343738656566383761323761663931
61303564343837656566303831366133636262366239383638343762633163326233326662633932
61616236333131393630643837313863323963326634306534316435613039326664313464636438
35656464353235353537643832323663386364363835653866316133333536353032656630633836
37666662373731343364336565666535636261326430396564383566333563346266616164633264
38626263303262643164353265353637313030316465373665303336393530626466633832613532
63383263643064343831646637353561383839343233313839636164313565306532383862646638
30663838303866373166633735326430383538643031333164313565383662393163313436333534
62313835363463303933383230626131643637386530343630616561373966336262626462303263
63303136346366386263353831343164343361653034653964393231666338356531333736333266
32323437346464613461643133616464326435306361643731366530623335346364356137353266
37313733333839313439333234373364636461616436633031333834343535356466306231303237
30333133663562323631336563303066663463633335636337373866313362303435323436333833
31336562656365396539663162333030626466386238353235323330373938643230656564366430
33363561376237386463313437643537623637363164656463613663346239643837363466646437
30643364393635373666383266383134336437653130383934386366383032383861303433373234
32653433363064323237623438663235366231313531346139393736366535373664323530613839
34333630626636643738323632333336633765356630636639333165623761656132376362336638
36343238353363616566333666303366383336336632363335653337343230356438306230393066
61393066656463393330366433353434343835653862633666333666656536393534316438363863
36633361636536336364373430663236323532326262326531656662646163303661373637356233
63633765613938663431616262343536363239353665636435383462363635343365383332613434
61633662353463363462343430353266643962613031383438653165366134626539666135393036
33626133646661343539666337623635623739326432313139366462613039316466633533333364
34323966376363663366646239363937663139653561313435366336366333363630326536333333
39636163323531383332376531333737323531376562333034623364363839376539333261616633
63393762313835326135623333316238353530346366393130363435346136643134613533376530
61376362353166613730653162623536633839336430613331613065393663343732323164376565
30396137363330623065613466643763326332356535306266633264346564356462623235306664
64616536303161313134396435363731363237383533666634616334356230633063363166366339
32316335396639666536376364323266343138303037663964366163343463623865336666653164
30303663666466316635663133343362363665383062343664616261343134393261666233666430
31313336383463613434316365356136643631393764626339633361373034386266326565663937
34626162633632393365373033373966356536316166383632343733313265356632353066393265
65646330393264376238656236373535316631333531623461373734653335656334333539653933
39626135663731323265373464666338653165363066303164356539366339393230666436623163
63366561356139633731323739366366323639373666373831356562363562323265616536636462
36323965303234643566356666313465356362616565623338326565363233613236653633383632
61663137663838626330353839353635343337636563623461633163643961353061643666313865
61326563613738343532613036636563396433613930633538353330383836306562393865303566
36623831333965303931383638303163663161396163363334613666653438633463633332653237
65386561626664363664353033653931306632636633663832613430363534643830326662303830
30343332323763636166346237623732303136323664653362373239663431656563656666653333
65346262653239343864383839306531663766303466656337373234373762313335386336666534
61386166333431643566356630343166633762393866656132393037353166366231643965353765
36616434626133613365656438616263353061646236663161636563666232353463616437393033
64636534326137326166616230656634613233313833316338613138363335313061386132623336
65363662353233633530633533333966663464393036333161393530393536636534393338353133
36376339383031353562616165353862633735646330326135383336383236326239303739346563
61356338313864376539386163643363353434323434633634343936356131333935336362366138
37393063366131326265313834313462373439333762653031373962303738316534313537373664
32616232323464376465646363326131386663393830663531343337663933343839333235623565
39353435366435306334653234393836356437396530623132376639626434376432373638333737
34626139626534353732343235353737336333343931613262363339613533313333663833386534
66363330633832316530326236616337303166366638366438643834613633386337643232323935
30373938323339376635643931306130643765626337633938393238663838373464336237393534
34316337643734616330313030353965313935656536383935323432363564653339613863643332
35656466356666626231356236333139636633306430343337353463636233613662316436636266
61656462646437633565373561356435326235623065656237393262303262393939306135373061
61643162326262343933653165396535356565363061306134303434356665343738336338653464
35623164316164323164306638383838336263376561633131373565353365623862616631626437
66613964376131656461333262336238623839656166336361656139383837643363303265316539
32366338613330353338333761666234626434656263343237646630336161346434363265326230
37393162343764343730313066633931643836663933356635326233623339626239663063326632
36646238363664633562326536326332386663656664346463313938666362376364656461663564
63663937303261656633316139306263366230313966616432336633343439386363656536633930
33306561356434633765343366666665323866653363633434356334363834386239666362306339
36363535383161636363366435656666336539386436323830636530626234376430653665643362
31373264313131653965663137636337613630326239303638643662313463643465386363373934
37323239346165333134376661306162306662343161363336393037646534353834616235633534
34623635303661376333353030613331653237663061376231623036303263663634323062613731
61373864326431306233613639613931353830306132386235393332306338646531353364386132
35386630373963636432623637343032623537623539666533373666653634663865643936353065
36333730353033643666353636303564353539383265376636316134313939613161666236656539
39643130396131343733393931326431303037616635313233326431643936393465393030306466
30633235633661326166646361316264666638353665303634323137306462613339306363346366
61336236396530383063393663656232663539346338356261346466623766646138656561323233
64353436613631623038303634326365333039626165633565343637313565393466663031383934
35303062303237663264376131396534376131323465363561383539336363613635326563633461
39313539396461666431373433333166666561333563656134333332333335663331623037373630
62353035313538633533363139646639346338613763316263333434646164313431643264613435
61363835643839613337666436636166333565343437643234386134353236383738343931346533
65383332326432653566633733316530616635353632313832653936363035336661386337373430
61653437386633323661333038323238363537653733376139303863363332333534353333653637
63346337376239333366363231616638376636326666363730383037353730613261653138363437
36316133623265623265643535336635666366616630643633313034666332636331333666373435
32613538303330353439326566656463353032356439663738396335373831323664656361383535
31393261613264383736316633393866303262333731366632353262663039653362353464613333
38343164396265393466316430623064396466366164643332393135323535666333336461623438
36336266643966303163643932336335373435313564333665393564646562303535306534343830
30353961653635343332306566373932313533363463373734623236653933636664306364353632
66653163633930646237366439346264306165333632383137366538306331313464616330656464
36383131636139626332323866336236316234643565666230616265396532336434623132366336
30633131653364343464623763653836626463373630633863313834393236353431636263633166
62643934383462366533313962396130303537316430363930333131653037383163393235613139
33383733383337326461643861333763366239316261313039646134353039363530363831363937
34333338663861353335613838633631626564616639633034393964613038633165633037373236
34366335643162366561616437636465366337366262623562376436363531366138373331363537
35636463613165343139383138663236333563613866636530646661623831633934373166303638
31383837663363346333643237346332396134323065353563663465353533356635343065366630
35666530343264363135323965383265356538343665663532353435643137383363356430653665
39613035633630656266393361303832646632393938396235656237386339356563393366306661
39616439343064343130653464363063343366333837366365323066383436366533646266386233
63613361646437303338616166303535303438663631616436363863623461333234613963623961
38323265636138333063343331326461363630393739616161643761316366353862616530386533
61393037303039666465663464313332313561656339663830643362396136353632313432316136
66633366353638643963393761316461623033623135643163643262653939323533373431616165
32373765656535366630643366623032626138373034376231303139643939303038366161333864
63376334613933663763663564653765386435633833396535393034393365363464393066306437
35623433653564653635623966626430616433313330356636373165343432323638663933636561
64303937303535343036646236303539376132613465303564626437366637383638333865643133
64653036383862653538333665643834666462353965326439656431613739326337356431383864
62393838353166346466313164363062356231663730303833366530326637306531363234666366
38383365326236313934383762303261663965656232353362633562316336353732306638316339
33613034646430383836316462613237353662623032303639653132393936636435396136643537
66623437663731636132613231663435613662313436383435303162366361366238626333663163
31326233306265313238333164363365383037623037323134353530303866663964636430363436
65663137316466626634623466333332336564346533646363316564386334333161643461623235
39653263326630316134316530666231656434313165303931623530376630666338653738323034
37353830326665383734353362643661613761393232666162666233376138666266666139656134
39333132366431393230326133636631653938393132633831316662386234303235616635346136
39663332303731313338636632643032363361393330666330666263653132656339353763353135
31396363346533613763353838646364663865326563376336306561623133353362393339613432
31313665353032393032646338333065303133353365633735363962363362333734393636633065
34386534653136316637353265386339613561343461643166396436663466333363396335396333
31656664346336396136336564356465326236306332313737643434653334383166313662336366
35306531656331623163333164633131636461386564316465656466383137653639666463313134
37336466336335626461386132656661383238356630336130623864323439313561343330613131
39333661363531663436613639643337613539663863306339616466366332616538393433366533
31376631666138356438313163333666646265636633363762363837303863626636316631336330
35316638343937653837623163613431623039303730333930626466656133626532373837373261
35663935353963633439626431343236643062313334663638636238353139643735366331323332
32646431306239383562633862393864323962396561663264623634626539363364373834303833
33353531373133363863663933373161336162343261383331343131373938396561386639333039
31366631363939663233383231646336353136643736626631613364646361303331353131633565
61336663373739323336373461623539643238623263633539373437313532643464646230383437
63306330356534656661316135363733643737656132333534366239623838323339643230346432
31613163333261366563333131363733343834363938363635333935393135336463656265666134
62373262636365646331356566666532353064613336623566643835373966313961343139393934
62363031383364663031373666396237363565336238353163623539383465633539363136616431
36343165373363663666366366343965623462353861323833326235306662633938363130626566
31393163373866653637663263383765376632666431313638656562633235333634326638646236
63356262643933373866306637333333336336633438343431326535646163633665636266363735
30653136316137626630353737363664666462373565313439613766646333376663363039363335
62666336616230316164656237643366303139343866326361313766653166383564303838636232
64656438343631393166316364373462633463333035613836383638303139353331336234383630
32626361323863343565356335653563613737393962393239313038616665366331663463663661
32373031303336376564386139386366653762613361643764646331643535623261323761326133
34666637376337386163373365373336613539613338613131326333353036666462366463636666
64636135366232366266363438373065663562393836343931613637626561376632366163343261
39333666326635656434306630663365316636626332333336623639623436376137643734633333
35633231333630613532353838666532346638306137356237313263343762663262346466366239
63666463663563616163393331616561363761356231376438653835353330303666343637393433
36346233313062313637373263303331643630636533373032333738343430633663343364626333
33326637636634306261386666313163326661306539346333343330646364393061393565643635
33336366343833326335346131653963653038653636373937333666343839666137303738376162
61313364326532303838666233616635363936336164623733346435306462353539653862613439
63346637356536383836653865653639393132356136353132396266396636363637396263323262
32386131383834346536636333643030623634643130313437633862636162316533356631343838
66353862626531613664343831356336333538373465343236363264306230613838663362356637
31313863636132323565343232383430633834646362363735656338623633643837303165626162
62316335633161383237643039343864613766636362376639636138343032653133333261333130
64353765643165316532663762633038336433366231653931386361303438313063383864666134
66653365336133363138633534633165336462373434633733366662323134653635366263316439
63383133663166396264373666333738633030373765636636333835666439373937343966376537
61343333333038303161323531343665633638303838303132363064313234386666636131313564
36353232316265323037383462316434646132373838313265323930363965356434373439336438
64323635613232366533613562326464363661376163663930613835396164326138666433653238
65336330646437316663323434636538613438636232663630336266333133313263303231626261
33353034376366383737653137613330663236666332393764636631393361343765303064356336
30613031656632646238336131386562636239346238363438366137323032383637633231393639
34663433376636353835373934636366623461303062383139666162393933396165613462366136
31323338343735333637303263373739616435363330323065636234363839613930643233393865
64663034316336373963356333323635653963363061616532396431383033656665656138383566
33316636643166376361623763633930336633633361326136616134663966656433323430393439
34623666613634633566376539633862636363643930316634366439373534616633