justCTF 2020 Writeup

Mon Feb 01 2021

    1/30 15:00 - 2/1 4:00 (JST) に開催された justCTF 2020 (なぜか 2020) にチーム「LAIT」として参加しました。 @betit0919 との二人チームです。自分としては初のチーム戦でした。 結果は 61st/804 でした。

    cryptohack を 1 月にやり込んだので crypto 問に全振りする気持ちで参加したのですが、2 問しかなかったし 1 問解けなかったので悲しい気持ちになりました…

    解いた問題についてまとめていきます。

    【2021-02-02 追記】チームメイトが writeup を公開しました

    自分がフラグを手に入れた問題

    [RE] reklest

    実行ファイルが与えられていて、 file を見ると

    $ file reklest
    reklest: Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
    

    となっており、自分の linux 環境では動かせませんでした…プログラムは rust で書かれているようです。

    とりあえず main 関数を眺めていると、序盤のほうで以下の怪しい部分を見つけました。

    │           0x100002544      483305451e0d.  xor rax, qword [sym.ryklest::main::OBFSTRING::hc44d85a338dd293e]    ; [0x1000d4390:8]=0xa884df8ab2fbc902
    │           0x10000254b      488985d0feff.  mov qword [var_130h], rax
    │           0x100002552      48b879777fc9.  movabs rax, 0xd598d291c97f7779
    │           0x10000255c      483305351e0d.  xor rax, qword [0x1000d4398]    ; [0x1000d4398:8]=0xe0d28acbfb46461a
    │           0x100002563      488985d8feff.  mov qword [s2], rax
    │           0x10000256a      48b8f43b9836.  movabs rax, 0xd32c3e736983bf4
    │           0x100002574      483305251e0d.  xor rax, qword [0x1000d43a0]    ; [0x1000d43a0:8]=0x6178f0be4cd508ac
    │           0x10000257b      488985e0feff.  mov qword [var_120h], rax
    │           0x100002582      48b840218ffc.  movabs rax, 0xc428f73fc8f2140
    │           0x10000258c      483305151e0d.  xor rax, qword [0x1000d43a8]    ; [0x1000d43a8:8]=0x603ad81291b66724
    │           0x100002593      488985e8feff.  mov qword [var_118h], rax
    │           0x10000259a      48b805f534e8.  movabs rax, 0xa419a7afe834f505
    │           0x1000025a4      483305051e0d.  xor rax, qword [0x1000d43b0]    ; [0x1000d43b0:8]=0xde5cdde19279a148
    │           0x1000025ab      488985f0feff.  mov qword [var_110h], rax
    │           0x1000025b2      48b8f9f46d8d.  movabs rax, 0x4dab6d008d6df4f9
    │           0x1000025bc      483305f51d0d.  xor rax, qword [0x1000d43b8]    ; [0x1000d43b8:8]=0x70e60361f80e8eb4
    │           0x1000025c3      488985f8feff.  mov qword [var_108h], rax
    │           0x1000025ca      488dbdf0fdff.  lea rdi, [var_210h]
    │           0x1000025d1      488db5d0feff.  lea rsi, [var_130h]
    │           0x1000025d8      ba30000000     mov edx, 0x30              ; '0' ; 48
    │           0x1000025dd      e88e050000     call sym base64::decode::decode::h7723b7c06b238114 ;[2]
    │           0x1000025e2      83bdf0fdffff.  cmp dword [var_210h], 1
    │       ┌─< 0x1000025e9      0f8406030000   je 0x1000028f5
    │       │   0x1000025ef      488b9508feff.  mov rdx, qword [var_1f8h]
    │       │   0x1000025f6      488995c8feff.  mov qword [var_138h], rdx
    │       │   0x1000025fd      488bb5f8fdff.  mov rsi, qword [var_208h]
    │       │   0x100002604      488b8500feff.  mov rax, qword [s1]
    │       │   0x10000260b      488985c0feff.  mov qword [var_140h], rax
    │       │   0x100002612      4889b5b8feff.  mov qword [var_148h], rsi
    │       │   0x100002619      488dbdd0feff.  lea rdi, [var_130h]
    │       │   0x100002620      488975a8       mov qword [var_58h], rsi
    │       │   0x100002624      e8c7360700     call sym core::str::converts::from_utf8::h7b471af559db96e2 ;[3]
    

    xor で得られた文字列に対して base64 で decode しています。 これを実際に再現してみると、

    def xor(a, b):
        return bytes([_a ^ _b for _a, _b in zip(a, b)])
    
    
    a = "d8bdeee9c2938e66 d598d291c97f7779 0d32c3e736983bf4 0c428f73fc8f2140 a419a7afe834f505 4dab6d008d6df4f9"
    b = "a884df8ab2fbc902 e0d28acbfb46461a 6178f0be4cd508ac 603ad81291b66724 de5cdde19279a148 70e60361f80e8eb4"
    c = b"".join(
        [
            xor(_a, _b)[::-1]
            for _a, _b in zip(map(bytes.fromhex, a.split()), map(bytes.fromhex, b.split()))
        ]
    )
    print(b64decode(c).decode())
    this_is_very_s3cret_file13371337.js

    となります。そのあとのプログラムの動作がよくわからなかったのでとりあえず問題サーバー上で ↑ の path にアクセスしてみると、 js のコードが表示されました (整形済み)。

    var _0x38d9 = [
      "charCodeAt",
      "537865HVvFyd",
      "153402TvesmL",
      "637814tgMjYr",
      "191740qwGPgk",
      "length",
      "21541OOTfbk",
      "2FaFWFo",
      "4DOGutk",
      "21qyUBwr",
      "500024opEyBW",
      "2669431PGatTv",
    ]
    var _0x2b2f = function (_0x20b4d4, _0x6e7ec) {
      _0x20b4d4 = _0x20b4d4 - 0x68
      var _0x38d9ae = _0x38d9[_0x20b4d4]
      return _0x38d9ae
    }
    ;(function (_0x610c0b, _0x118d97) {
      var _0xdf5613 = _0x2b2f
      while (!![]) {
        try {
          var _0x51bf5f =
            parseInt(_0xdf5613(0x72)) +
            parseInt(_0xdf5613(0x6f)) +
            -parseInt(_0xdf5613(0x6d)) * -parseInt(_0xdf5613(0x73)) +
            parseInt(_0xdf5613(0x68)) +
            -parseInt(_0xdf5613(0x6e)) * -parseInt(_0xdf5613(0x6b)) +
            parseInt(_0xdf5613(0x6c)) * parseInt(_0xdf5613(0x69)) +
            -parseInt(_0xdf5613(0x70))
          if (_0x51bf5f === _0x118d97) break
          else _0x610c0b["push"](_0x610c0b["shift"]())
        } catch (_0x41e7a9) {
          _0x610c0b["push"](_0x610c0b["shift"]())
        }
      }
    })(_0x38d9, 0x6f429),
      (text = "{rewJey\x00bnF\x05B_EnEC\x00RZHnSD\x06nCdbEn]\x01\x01ZBnbR\x05CHL")
    function xyz(_0x4821d8, _0x1e7b78) {
      var _0x3cb5de = _0x2b2f,
        _0x342b88 = ""
      for (
        var _0x2e0312 = 0x0;
        _0x2e0312 < _0x4821d8[_0x3cb5de(0x6a)];
        _0x2e0312++
      ) {
        _0x342b88 += String["fromCharCode"](
          _0x4821d8[_0x3cb5de(0x71)](_0x2e0312) ^
            _0x1e7b78["charCodeAt"](_0x2e0312 % _0x1e7b78[_0x3cb5de(0x6a)])
        )
      }
      return _0x342b88
    }

    関数 xyz が定義されてますが、特に呼び出されていません。問題の実行ファイルとの関連性はよくわかりませんでしたが、この xyz のコードを人間に読みやすい形に書くと、以下の感じになりました。

    function xyz(a, b) {
      var ret = ""
      for (var i = 0x0; i < a.length; i++) {
        ret += String.fromCharCode(a.charCodeAt(i) ^ b.charCodeAt(i % b.length))
      }
      return ret
    }

    何かの xor をとるっぽいです。得られた javascript コードの中で、 text という変数が定義されているのに使われていないので、この text と何かの key で xor を取るとフラグが出るのではと予想しました。 フラグの prefix が JCTF{ (他の問題では justCTF{ だが、この問題では JCTF{ ということがヒントとして追加で与えられた) であることを利用して、 text 変数と JCTF{ で xor を取ると 1111 となりました。なので xyz(text, "1") を計算させると、フラグが得られました。

    JCTF{TH1S_w4snt_tr1cky_bu7_rUSt_l00ks_Sc4ry}

    [CRYPTO] 25519

    楕円曲線の問題。 Curve25519 とその曲線上の基点 GG, 乱数 xx, P=xGP = xG, 乱数 mm が与えられます。これらに対し、

    e=SHA256({m}.{sG+eP}.{shashp(P)+eI})(1)\begin{aligned} e = \mathrm{SHA256}(\{m\}.\{sG + eP\}.\{s \, \mathrm{hashp}(P) + eI\}) \tag{1} \end{aligned}

    となる e,sN,ICurve25519e, s \in \N, I \in \mathrm{Curve25519}II がそれぞれ異なるように 8 種類送り返す、という問題でした。ここで {x}\{x\}xx が整数なら xx を hex 表記した文字列、 xx が楕円曲線上の点なら x,yx, y 座標の積をとって hex 表記した文字列を表します。また hashp は

    def hashp(x):
        x = hashs((x))
        while True:
            try:
                return ec.lift_x(x)
            except:
                x = hashs((x))

    で定義されています (hashs は SHA256({x})\mathrm{SHA256}(\{x\}) と同等)

    式 (1) の左辺に合わせて右辺の hash 関数の引数を決めるのは難しいので (hash なのでそれはそう)、以下の通りに計算しました。

    1. 適当な e,s,Ie, s, I を決める
    2. 式 (1) 右辺を計算する。これを ee' とする
    3. 式 (1) 右辺に e=ee = e' を代入したときに、式 (1) 右辺の結果が変わらないような s=s,I=Is=s', I=I' を求める
    4. このときの e,s,Ie', s', I' は式 (1) を満たす

    では 3. の部分をどうするかという話ですが、 . で区切られた各ブロックが ss,IIs \rightarrow s', I \rightarrow I' としても変わらないような条件を書き出します。 hashp(P)\mathrm{hashp}(P) は固定値なので HPHP と表記します。

    (s+ex)G=(s+ex)G(2)\begin{aligned} (s + ex) G &= (s' + e'x) G \tag{2} \\ \end{aligned}
    sHP+eI=sHP+eI(3)\begin{aligned} s HP + e I &= s' HP + e' I' \tag{3} \end{aligned}

    つまり、 e,s,x,e,G,P,HPe, s, x, e', G, P, HP が与えられているときに、式 (2), (3) を満たす s,Is', I' は何かという問題に置き換えます。

    式 (2) から ss' は簡単に求まって、

    ss+(ee)x(2’)\begin{aligned} s' \equiv s + (e - e') x \tag{2'} \end{aligned}

    となります。

    式 (3) はこのままでは離散対数問題を解くことになってしまうので、最初に適当に決める II の決め方に制限を加えます。具体的には I=kxHP(kNI = kx HP (k \in \N) とします。 すると、式 (2'), (3) より、

    sHP+ekxHP=(s+(ee)x)HP+eII=e1(e(k1)+e)xHP\begin{aligned} s HP + ekxHP &= (s + (e - e') x) HP + e' I' \\ \therefore I' &= e'^{-1}(e(k-1) + e')x HP \end{aligned}

    と求まります。 kk は任意の整数なので、kk を 8 通り用いて e,s,Ie', s', I' を計算しこれらを送ることで、フラグを得られました。

    from hashlib import sha256
    
    from Crypto.Util.number import inverse
    from pwn import *
    
    context.log_level = "DEBUG"
    
    ec = EllipticCurve(GF(2**255-19), [0, 486662, 0, 1, 0])
    p = ec.order()
    ZmodP = Zmod(p)
    G = ec.lift_x(9)
    
    ha = lambda x: x if isinstance(x, int) or isinstance(x, Integer) else product(x.xy())
    hashs = lambda *x: int.from_bytes(sha256(b'.'.join([b'%X' % ha(x) for x in x])).digest(), 'little') % p
    
    
    def hashp(x):
        x = hashs((x))
        while True:
            try:
                return ec.lift_x(x)
            except:
                x = hashs((x))
    
    
    def keygen():
        x = randint(1, p-1)
        P = x * G
        return x, P
    
    
    def verify(signature, P, m):
        I, e, s = signature
        return e == hashs(m, s*G + e*P, s*hashp(P) + e*I)
    
    def calc_hash(signature, P, m):
        I, e, s = signature
        return hashs(m, s*G + e*P, s*hashp(P) + e*I)
    
    
    r = remote("c25519.nc.jctf.pro", 1337)
    x, Px, _, Py, _, _, m = r.recvline().strip().split()
    x = int(x)
    Px = int(Px[1:])
    Py = int(Py)
    m = int(m)
    
    P = ec(Px, Py)
    HP = hashp(P)
    
    for k in range(8):
        e = 1
        while True:
            s = 1
            I = k * x * HP
    
            e_ = calc_hash((I, e, s), P, m)
            if gcd(e_, (x * HP).order()) != 1:
                e += 1
                continue
            else:
                break
    
        inv_e_ = inverse(e_, (x * HP).order())
    
        I_ = inv_e_ * (e * (k - 1) + e_) * x * HP
        s_ = (s + (e - e_) * x) % HP.order()
        calc_hash((I_, e_, s_), P, m)
    
        r.sendlineafter("I (x): ", str(I_.xy()[0]))
        r.sendlineafter("I (y): ", str(I_.xy()[1]))
        r.sendlineafter("e: ", str(e_))
        r.sendlineafter("s: ", str(s_))
        print(r.recvline())
    
    print(r.recvline())
    print(x, Px, Py)

    jCTF{th1s_g4me_st0p_on1y_onc3}

    [PWN, MISC] MyLittlePwny

    nc すると、文字を入力でき、それに対して謎のキャラクターの AA みたいなのが返されます。 pwn 問だったので BOF や FSA を試しましたが、何も起きず… (% などの記号はそもそも弾かれた)。

    あれこれ試していると、チームメイトが、 ` を入力したら、 /bin/sh: 2: Syntax error: EOF in backquote substitution で落ちることに気づいてくれました。シェルコマンドで受け取っているっぽい?

    あとは ls で存在を確認された flag ファイルの中身を表示するだけです。 catless などのわかりやすいコマンドは弾かれるのと、 - が入っているとエラー処理されてしまう (されなかったら date -f でいけた) のとで、詰まってたところ、 strings が弾かれずに使えました。

    justCTF{p0nY_t4lEs_b3giN5_h3r3}

    [RE] That's not crypto

    .pyc ファイルが渡されました。 python3.8 以下のバージョンであれば uncompyle6 が通るので、バージョンを確認したところ、

    $ file checker.pyc
    checker.pyc: python 3.6 byte-compiled
    

    3.6 だったため uncompyle6 を通しました。得られたコードはこちら。

    # uncompyle6 version 3.7.4
    # Python bytecode 3.6 (3379)
    # Decompiled from: Python 3.8.2 (default, Jan  4 2021, 16:32:56)
    # [GCC 10.2.0]
    # Embedded file name: checker.py
    # Compiled at: 2021-01-31 00:41:40
    # Size of source mod 2**32: 50109 bytes
    from random import randint
    
    def make_correct_array(s):
        from itertools import accumulate
        s = map(ord, s)
        s = accumulate(s)
        return [x * 69684751861829721459380039 for x in s]
    
    
    def validate(a, xs):
    
        def poly(a, x):
            value = 0
            for ai in a:
                value *= x
                value += ai
    
            return value
    
        if len(a) != len(xs) + 1:
            return False
        else:
            for x in xs:
                value = poly(a, x)
                if value != 24196561:
                    return False
    
            return True
    
    
    if __name__ == '__main__':
        a = [1,
         -12036995612853156936286011036665,
         70761097437137270936102167471287642036368358112612482078746420,
         -270760577526471416726990241906082418991632930940814915432624543436128198171540530830459237956,
         758322670537213986632051073398213029056006764596691972083294378230604396150245020345345578151884326691815883061644661233566,
         -1657421720674295825624009196807881201156538425172549952934830837304308795987504067118576756384156695624672734346081929437648667598699921926783270422521766,
         2943390021186099695792268081013270881974196667794829319170473858847667993098751630233061218881909160771117031173382926124852410895503366161910086019204972875909440113347847703082692528,
         -4366383100467886811542338093572967906195986358001996645996577053050559284502186031169919156795228805003943383975970397387941387036889498492298331723942560238222112799249196225360410737774072015110348020353373827960,
         5520657464469375535085168005278119107452847156728963520071940150709637476374831684702730463162156797567804625424109791905935911485938940718675728473180762771955765250450118860586403306394732944683432805471041311503536936944211189737460455924147,
         -6040409639368566992709126213554806987805371061694777329555656706760189034740223003993705173076964844299286729470874869893022046365061841748296008630479942340847091453888484451104939876908871692943720179628918429033381977815457948153865807902121350090290570804279375193602547,
         5787710311953879633285309790297805038175576804393314204803650513323659377622042796125454467459097599180897540599672003687739070502385355827172336967661574794985226309399549992624547488182752884937579198351198689666699458701951885339136849427145623150163832591611182849332003464485162869766637587885478556,
         -4902642856751823968634429878262494576942716632047065846096770707728050182094968891567439863034907111831499802965078214716310298694040760316078813885901640406177102504706129153849665291022873031931149397522636563766789644071503388892322207399310201965746021340442189643918290923656823709309501519938717556707108603909365045056709662756,
         3699850006647501865381238611561204533954703596513977828245676687318619534759718394402547485705860055527499878494128302401350380880223847931293923712337830237696802484457727414040654050267719407523721753192192954325214018213886396819789763444724570129624497191387288297104476948209378314234137858016046265182331424030004663522013416916037839106625218484426766132660,
         -2503381664562615076035240043312725911469170509539322500963060841759565879950256432694328993012308199988929777908992648969277299854107452845160410508674734438149484603725126661607768709388709681121690616031411940270274531444374238202577182185377277536890746626118460104352336855579280862046594281695818828156430816693314911283123811829026498147207443379081851667392858117124554747617261592816308,
         1526711982649832550855518449178503829029850196353340802722606457634130620564821108469779499400756261224981382277459193658070861730121981192168711122342705299717814974832514426062327116393221946424916651023156518640300146832579990080903602768066190773540657708137665151529506088591181435588751034797257100353999653716239281224498714495869886616227365969999573784940771441781206939655753850520913539801350776211377271513357088,
         -842953984658658292309510977293251848508894609669997128814435442870981935530742340510532805223877368384282567696998286537095818935371349496091992146132001033224513854255752104540729586337863508063208122715111541501301144174827858857132680974685504851575251455307682302858944583075290460443600124166839500924896625206798501918127708303976904999741341695577320396134799421842795506409025615990094842987072821320651683929011822064975685462916516303634902384,
         422957456346049692341260179325895120684306237587214440494060245900277276657408824422711669420970014541252470333424859299500683275627006833534458868099396756712403692034269278482475139778970259928098027505102261561696249081523441920369791104913855327063145952604829043400103949464549772274121285034631499395728985827459374299870918290675603992428269671561018421791865147604740385306434431638468274562549300037932417098966321238908971362894129002412253266375766405005679438286791278839,
         -193471049395738297286458805008441710818481314825008770802571970679921027956585779537146446202478826950609736190194807825172632108912451882150093367246069044488762341087789876850505036332625451817014469037252491095338851035060715916393889488131974277346811552813523419091870330932321700273143277767115554985119661796352126474690109938223183938799977355475441400344426820861005586283940508501077301414068231586227057423191408340604559735999951401257465421030330286465966325054077255711362180689566758233710057894255,
         80897019154522265075962219548924972222636436750698695412227806781614120103433659745650075545971461672119108220868471749255613126082873507542167152903323879673774863333921546276134550254063787772245388823054886425980368342500816004573653666051201586676337846219409626502611514116162491663176124149268640462530074761560644187346420467797168402893384721587821312088473414828712930545669393960307822395265305548522184928090121229933916770534435506273872305818497882747209394943156010257351777286125488091273714057213582845077500529261868638114252,
         -30991157300659239962382379273689587220093781503633603852641077964766598209918780899862581405249841849580419484848937380799010280118110445100888261399985637695322985763319508483665087943432580280248542847142296516292494400706795213127260840340509645626416202896383350832440622296307920492870297868526862473426648809989495535621102471769488591980750103724888710559056880674173904556134782648406165369372034571096268617505069957968083950883339999122107567730333404604514354389945203159871211134432651406540338255858951994880308146641090354413931223004687783989063555851812332,
         10898530321547862643030259948967335811934203133929192367904890755259294271163493443682870574846517241924967062455138765967329006707910465682333449349018835562602309248817129871747335083073891193148294035699570875945352432067866706606239164851406421462058420332552965055414571465939437934392338438084667282993998949249796333219837811302814971298203468153586251416698554237173187673308562671125010808183536298638986822018942577788091825897904881920744165279001531298651176433961621534597834724217263194654167077985702947958677282348353458897390629629764004013036336330880093494331011464289634037017059214,
         -3523891268719178617759391809696923916578965284368737518166062248827788805300611865357813506341470316533643980951649555395173184508027745014830255418990900729340065218020240066600234292691672294001222463962574343779827770240884946876825398129369449011728342610668390522641632065198956770679949718117639126401069096207516245707091485711900287586853920592094560440500466802097357798144178495254141758895862331325870996171907708591091005766433147632894475782971686761833660787599005566476381551522935129751766549571289862929785293475659486103842879638568779437560167848869297989189727248020161597283822916679478127348097455219687020246,
         1049009395230525946835204327548745660156382103007727038340730605980146773881703526297708742302344392073696822402637984418028824535544901991033420144943360862855744087273191157069965996576985065241424052402265664038379601376920784084651410568081046823376484750182911675376670592592771684011619580226595658630220330126011121106217256782282379027503421884340258486872321433471543280048339959424917173848371112774255068385431165707257285264232385125302656416873392160285571621178003766451490132529708902899674064109724216053072604708836227110013896479251077665577991703057909122183611797152552009819156835684806785365708050958996985688682378524937123437113458794800,
         -287810500492151548704834586633173910345516524879889477620674537190071503503969609698127410745501217046444634733043868178114301412834111030692746464558172261410990112508955801860598602133422753742672612529928573095791568079235190936246876814895150614004510736735152739120657011389172288819540144717236381642829677520679733583800061927794000695383881260491154467723614815557782051558785579254134658030800198262855045952024611446314567918327599163858607698407896819819204117370134035811842960931529124425186496190056990123089220803115260188054910949673201587132528301941935571927957866486255847354681260531046431612165489961862452805031601912597827112293802459202999946017946157963701655642776,
         72840318775523772116121505571723194500864654508297281644035338196315714347706564858121752344175267740057471861924492906827371905580196416981558219725458068759767367613231287267276009431156938141451038364085993554531012918027557882908586474941671885608288696599907767591415770050593926179331528859532069108277391018847050018627360239651375231529713021740867660844960443186281913821951530782331193426282652133390091334505577047329661354861141452136808769623993046940515597706687313752959732361880320118662945891674094728822609014144417184889570853661896640972097678624262109845060262858334075199394582752449557111385061948748069431267873951357429685102744784262058549954007654241063166381981051660360611756484304170176501,
         -17015681558771486155991007955035116076916512293462793673073407338981064531587665371425793544798973639832840416528082008366412403683725263295689004989181740798880208077137794154071759428250102191888377308958606373274224612850521767606720959505007813580866156156201686562664735461061092174619782430311775336027983211559779031600313037713975778935175652360701138102690020160409221296951380222517370044659713252826142337434715993710821121572661660190646046721128592648492458845822598408305251233127433350640998788686337395104295986523640915799392273941815347211960667381140265313967220495404639746907765103117552471119949192461455676214101535861346059114627017679625753522782636018574909447911019663571364150056373926806128745937931845622487846513916357,
         3670505643698807770496066549426487543044433524593104400967542140123349295207658297244298273345531843471130079868055038715113362271938898428021857083393078228958671136583691637859204161146716774861750866178209789574618404882196694017123685798554854657596785758770974107278226533128136181405670440021690889385703391488781866709126016548106939070579747117576098992359377394228220706779447361475376460634779182153078870817436657882843994806316089044877371156374764956933108009686399110354159952801071877914638008129468833129910897809624784655634766612578004309484519800013003991085235735139951451635119639008813704432054380393531786554450622153409865850256897448948031152704170233538304141312860022713268817207516719861091291449152357142927278885744260319551877513554838149764316708,
         -731315297214901799139202226642962186173776982258102506692316932763795032743292377175890156601824196328936745458544624900647832095161663496247587791976430523643899796449952629749116002156959020968317780510578493400432452293359722025285359196367572082185313124359138787551913136635287208128868743941436782673187963177174300058482024530962694729576411128199111690887381708540666199323867911914607653836035391796042056384719339544441615296482897832207995788092952960885600835804283408893971607314409051092575924442423451556806111817424915752871597371184293880821660039396769305892714235730696644882917103959109487994369840515373474703535192631359911662003579518759973386703911657782084238830285947420510116743089010517439974565215592656374774187712404786259152981895785366773522843906165969941852247976278940140,
         134588528415837658971047490199075666835983514159390616681971680164426317794252868732531422532794593330820045723106606802769644664837947203224317121164306807029000447752334411176404631986731015901307373679874408259122541902499565332320416372409756172044589603356069972918336468104222848469569332044171922438768606893049886354059429438450092278088448540986615736961184575742243334957502069493588758963135543678872507263849640682527958179823194776330017218145694418493002516852248007743753481985830130689353474387451295435005293382566297602196352356393211628524787947139580665041989232538881406837165019870948901349858097327606819982116039073752567514780339585704870050505509505256216218426474073520589165338095570821431112177942187984453099693299866831437635621848517302748465288485887387181042050531984919565966314039326910947728329217408,
         -22875957473830912158559251349753119246246028439796802316189907676257055443164950327490301280655070370706400884237611026797386817741222030981528483512198474831291362720520009743010823019749778972913806276343563388644805865738647488132609026766722479817157773855452724391231191095182981857349503286673006225897318947019340122022447099210550952673020554821684145040812316573357274661887067747296688932259213795508240113558452300792402515996550037064993418610627398498300456256150668739383384872747120275221990446608522768652036044536618045251875249988718794874912625102101906638310050673947622263770603322155777161417005867653440423144342108575510122918652004346881066456070847132919979266397792337083466690636480187634224063775252238228709568987308169158240158897515505856720403103771596160205646444883300697213872820817251033080576927509135697321215233329106330789808,
         3589904214789285404480068384761918869315288025031643288153057532554843931071447074908086375777364597702678619183887538332288430847470452127647273778012444791469468409474451624494740160128549964698187914675061260752136238626554900744382507017799761805307779682225136113403649594489191570757212667376997014713445701475742689005593760736255290065757769807448625355293886110432977294990407478106332258662633198134700047936979088736590113162886959370847964675936389208698875967627192927493287173549157788028702937490448050270980996250906060464800657700349234992558996788220044197097125909813953778354228644265668860678027657675211666863791322466803827732883569606916094015371239906736135812007615890817631618375310069832835493824353168053212807350860174519962686268038993947445302401334982305900192811360380608647169876351836071213350870612123317150854229830866789504543395008833625678886029992122944,
         -519880960318731666430752170899676999687923011737328772277171012154760408617709494489651643230230317134795813643458165671280798409467487764568260337834609879875388857280998705324361399939693570241389572752134220032855092067154745695401524070896550104999507083873790541672997884277476374108790678607914813688796265864916310482243621295926385845431074911305632755546516597507265144364486330773094771717722561193128006945058747657129516864738139958764953525270585988072193132182627105015267511014105405260622791006682971059348191231980276260514252684694437137414057994772094561461123223503768270104000134107269404230155327425764606525187765761456558872254546763623783499429014442184982711860102302038560964398967793136357782335828049076815522816586286609875139235961963707678414779338620479718331603957843322541895929561698036486356350864694867528799591755031057961849031951739529713694163603138812177986133157686015726651573824,
         69429884713385519751805503088403128841373124204648141141369557369850368626425749871309239763674129324203007485411393556740669800827041173826537358213240252978295767322831541724495231484909646017525557000915257754872590949816397791527668736709816688906128564173745358473501683791937201430965764436743805593715745195102707507491011418927738183297757701941722461003975971280206503094157086640339571802861568004509369817621968821258295937724890951314316626018408950261505815353708750916096943936090291423627820548696325157411543577774295382498366355705624347323018207984850068691801434427828466555080972199328155206204411299968928310320217415104792594608789293567566561950268093599804012282939811790029753693443241547221052604690652349153683419052611666910656948458241685482318354190774781749082096213552882969802531327789566361113175227055805942995304709347132709499451464685081831301778561849204505086398426513624087039399886290697740323118572639119921920,
         -8543394068815432991763301895204730377441561924064714761176087433415828187835828401957576566087962793744084441592642899522687675485297774268406707441844139345241926863597925100301493126461304582808193960154836831369920793072140462182730468702677668350691731033390662890450516780149634126188249753495279547823312695621054370210296296728468272959404280263030990486358925055833048336380628212992119351863937949121897311911182483670369328719059780568504856282334160434756704790900663433087715578780003018360761437438381068669811113988048911671665720416602428753820726002339833066009638607502954162251961838883804012146937019312826891273583407556902837524593671107565519084447405218842440182065641098520045668390585430020730818486725980179752178345492643732570960987728634272499990501876057731522386499062725301899266798590899663300664566445120663392552116765497862659401508620519647961225734325537451545861625438398505542059060021597382826088641647311379804097918646714609880944784256512,
         967581803550262158817935482164955136811949811524635447888347031169952727906372415527240136382291215289000434424776953388613932905490841789159652902076532524359709368803379807613404304433948716228506367021414788038155641810842356360867118461941087114325113320634236383483784306911108158042070956518697216591869161548475842987308114297120134346935509187423252488005387861165813608871165904875168924047936707163985567709604945376639246514184286633306136675521555599525862672982677230166014025232977783243089473647741874208594579084196163472874095851579200595790078948643950170916722206884845269885305716972876161098901162821790959020629419969019231951721210187359242977069077103149436431720427976051505461591513448614280827125606000321850488501711683961615922476319278142325438391009310435552202267619024958179442902293717475010767009234583199963324562799945703700689018917421300635423382707209344210975760279417669273969445271468967684121897570827045551198545121214210375660602307505320953850733500713837402028032,
         -100729401944560042968662403788161784328711120909365913662918082847787894281339591308004463475314174951192206568542399211905459633821927934410154953493019848279814461375941354231327650274343193876824539291174507790701547797761152980589416139519943258696989004480414390217542117839298720510449759239781224769103374136668394886115486939557712150814050817879966130191832802508934776540607332752870919649165358711935076270079122622421392739311787342888778377353633658029661776700540843792246404323445605147691524159271971172124033473381675466322494228394610259965787361660966938435176395344982147544728869114983482951336147065552430213998661140246713013075013990229018738036773939477628764039571656484266117812419888486241846157872248265382135567140427587825581805632560382459109325379223795244330555939470874299371611688785145489582815090316369663927406723813171281425171485709962690836826189682829097472498416111946924420015387733929223167312166445286521371714987896926589106790881992944774879802795804826772644994247261621645258958721350793216,
         9624391485665381620062003905925383858202059841614400276309628554208329968294066038142455973352511508185137796886221532601140792267497719577984290252693998764962878667726919466688085558544972875470883938831589941755036939614988496722581705039382719838502180981836514849717188677862771906224282717369780313244099458775614116495884990831026224323545753736052243919418041836107503867881344356736832391919574962524425784148394054423208444735239251403585546813070694601107220243103260584884996569307050853101493898759071106677138005963842635522409131897304479544446653761852978305129719974111559538844363974540765529172156217602706197243538565388357751724042939397905543464705139724154001242348094194170046945662384916258467706799521345632881280213524581293833496013981663445627929206770004742070975200579585344768730311788309886393834757240915239106805461725233846211051047917977639986126841271623651712673863539710981983209150974245828162132183716939475567697488281754170583353897297832680457108454412989870213540210333811434286735136137314970738552841947829387411042861056,
         -842492404626008202685319651978703524968535073885071398410419159861240869586642440539225248124224511521907172711800016984963600137199181988633107294911875912120260005015246691432361172554584819048707646136122248580162322520572746608789302989723498414737007672350147360019821312195497608343782508117815638927480027996092446667043269627852639021945145086975502630961122291921114957594542304192654666690843122076482066879573860278984351542517100147902984691032331485486348004235293968748901975358132669803180566696120863753308823809290593889373424936044813996869199804401311673361775577022817521697609162717332479288977618975264112176728661055437977771565445010309563372970595729169439495990491543574167965927591071875216493272223431598541263599435634027336365555864551872631551720258952467260781636711310327223848949805936283820428234996715477274066449157482715624374843181705444861922403799930885796437333357334418322356890504567436395379730767291497946871048337011309931082869853253739245531052661564747098296018352804417568682470998452641235722507779290076828097405133136327080632735521080965488640,
         67428024051081025925591476245915116672250518150516973741195533592281467551421485671097277700858741205095135112305648303857667018703733429216695721170757172504046315741034247094892324585188168512303931897603893342194104248514308147827527627461635056254515462642086613025038995821855526262114684371370854550443138828641381788022075434615364549597707352160350502137769784421209476085023901585775658784900209961846003234382358641149609131656852549983919010305909734772253837669487653799897740050051174257339584923095683150842090867487892050045150671143216477209891718291171092107350875437510220426311887233906513846747496502611017497551120008708664211560340552829090094255603845983533954267640938719639732716226817586766089646280315880236899473338901331129758327947908156008730096874129398308975074363744722809648716832902087049519613272638253660861524814197467763097655827179058895307228051531509404114929209526099035553896613687028796600501526245139208098418741187399499542114536918525722146057084976571872324487851375916146895335581854707635445886315884400684813873059159878187108405638401637874140607969333369323247945279766528,
         -4922292712232938264415179659464215370662711186447138425768198910030247121483908029882072055004011433976767098100059890647944529852298117601419732200032097424682192387405740406894198187920668491464621437393392891598873264668633861747789169891349134032953800795538573013156442268988900912520059500455536681162589415177296088649517794165998420636963289333446670774444146277712213720321011003242744612419123756176407637446138672858993718737850966389017732963748590744740085759179587505596534350992775130956934570094412325408058799400882668923132955060293225528852174345022305835042908880809435016692397099949056390534302548468712906792996143279259466722156845705596297223069359854714796506957214913101539973056110869430503475525888185542270940114557118860984119925177978935431895926475986669969137975754791956459436212100236925700154856698136153589133756914365450711180871094336927270341057213630888377919852900470311828485161573220784203525792104757861703527234978027851447377829854349964752576238255020757939829540794613891088029049857718719163321862163423073539963526927071471956581566465764182726646232313958522615838172067203185247844493669071017940123648,
         326862606953864243994493025571134183097005580822780665287071298443081452327938333305778294923037001048438114660846596409742529713392301897806894061265193635779528089549402883874711344165100632690980298793665147524103829415796304244737716583196489483916837646803947818365190608720226847790741849622165416960809546915823920897193659908383134985352827192072351013882126550670892040214634785767443490039675852627166097531693483669590126562310503573755513520132020598619973038320272032263539657727164546914087012099048929266257641343101555013302444544895835106936485579405990499293798698470344993537167549040994937014314157849695375247301011405414174918655019370056616128978782846799001460977274870686964948775750888536510308562913346421648132415655826398062271703664893729458073768599043232542509149429694669615401791073133350641637773170871728686027861722152104523706417394682646168856499176640549300500065095819378543943745831390812727880073391522186051220628185357000978071473952555876171101920744358523392352209875425765525843590677684939171097587062333410080731740812032283150820709437778431302084852208517279195742515252856625029333181007323666501063338993576249490385616362958684160,
         -19682387035211213376268717697596140497614877189167082614733127831934324570394405258989922416860683584536005682033669989287038178625524894503320821890768870715206162943270433905346330508212859609327521614319152979870578673868396679536205235437822587056805455938795571774651221022091758594861018067247339506032472645954149058865571209565183478642556252818177860385014727648223802030912253092284265336920379638050823223266015860719202316169187469292688078005492396279190841933920496129607288530503447126215551758467717541385666331403857069861886434654786393449205627350759445157856448608818623658216995073590007215954804254039161069877899821784190232111689738307708735026967410876100674313173828646976587680347980091053242397435225847949830410457558089691809535094405647526489373110788230979215943821142612077101128534145808110206605888000435066417917668089916668221660767875340564771757275331429557679680641720939730206657217449356154205932389369571237701004926883003166910951594087824677351974181096803598132521166375417042084428112636119358375837460531060765885259384213020828911889933371668135278800378252609635107431685796476922066486810191997741282284344241550357281661270805108535270573961646896367695988588544,
         1070896196191616316015303680542550811956468685944427279147752959700207089917239467886512325543721643587527791346056577110912090205465000338177188460206621242639700877805778391085639245027051751962578067609608064838883028145504609525149289746972047127656761492941897795020736704894189641664797500678370126521965409324351790800114498025443782175111584199138727858249334752047341368010493951409842323016676088546544793991689474544756634091541230122258607778547261020335299984724548057500336277237260048904835941603556605672655689857650228255043854665375870984289931244853156989495403955569821592574946641100063970774905280171080907471528875126203409227292007826708163452462771169695414317844882862870655701282496065187804622567500636477620236729687323288912483784380858170572808671335289416972483447428956611253614785915339766882950545554862575330994051225365318894378682856999999354232475777971260770549399842068476931010699445859573421500745202380684293064207666342069523158323552720275394062426032864783927425455942853749921648124192386697705752956368294567641004375612155549067325365942065165797146894509085566721427622373093162968167454785964097673804587221024719458421724474617577409129057409806924433004663554030358993633767616709280399360,
         -52430059743679409140676659634909812852390092094873523945855130079540208603100124764050667675099313709260138385071061185114320558001251012120505715107071166824365758539501001403178863550736750237891884813660843505882703016207987043286357156229311730033375817598336876864434515030987676154164886683762916691855328399295747666584067664532141361423157477435373821695814284089387126564933841690228449683368442396831794734594483593577310926886058161836249855118231437436455481994257071614393100018349937137181259879255514176869034252699327419860291616419754327314287400569477750039558231525298966665477015818056335710672583745829738107419558800256997628339395257921060853593232920709469076143786356306800487914547734032743358292336231324383220668604384663161930390786401257347184707660291774874293129828898450485876106212862305861283925802208659858551111895632479646232402028708952412596280056348008195418624011103914693785519747951804988282189606816419956822289634969145085721919238843836260140506046929612163627105571981450705891322328921498910093903791871600508496656039850118610420895023546271932574701958310668628346303757871656294501495833030435897959102405496357639688026053549112999373321384745256886902677570202276121782751159405161672040265376070220244756090932953088,
         2298808146237704162775202991841285877160968181269526479374190907804941917180230543235021092521412498867773867942874746516770655419397130112830454586681343448935813945935165405113807216361513255297271660852922609827373622168396392720875260605868556391334645535680959894150210630362295697494246192759052502278366332379359528977680747909852125295551196165365312670756913949745430856607248958875535770920440407867526308288783071913205162739209031358353108979950233165611262860485950149570532891962359788071268167391244916091854376717802428845605830278381486735142680827536856553047056851026000350124601048578023353228623629583518737721484612315933761498854304768312975738200612975454537672388015840777856922184871082260904384860224777194978994859428951241034398298226454314844198908619766352258525565193568811261330462000396955217130745377898223574887918140876535002483748312675074046204627575379596394249762715387636673501140888218630838424182978461143922841942672073471216774140856732909291109039943348436873688422664560438187824237183127231118504281386440712365865492849216438790191331882453906875784656976896776339339154040632428033832352990203446071023604867611045787298006536806066846512480154804723381712301663633108328784160960383304977443452224900548647662677738675890124050796868693322448764928,
         -89764146965055102531318689704130078645810100017924833554149986473785572689334408873779717673364397304584584363147500954468368007417137789542706489044506947045364009270066572399951524985318311158892430931882643516308468369682391152755238525006501661710301723999194568382314286440067994644411796872821935744987150522746995926694976867695429860277136925196871176537890811914108016080332580278200149021624815269175634541656644156351255033627460492903953040121686704923438127395963791947152241022433810149859121533141696812548822111229653769709666583071230040829532070716526804326762032792306926418825948921307006410184215690107594231221778738853375659142790616490144618201811277699914669703496507924445001840211241893198526686582040515441438279803639294019911781332800654832503396840836677009513208278160820377063302464621856828929884826658395251279496283523137610388680551676476777991448223247060184111666240549087714994640107523591332178745040634679165757616116024947162774373984684575436581915662181383565221413340783408981815284787995664282614507514434355344920962994741421721055699354893226523523921307511533094991974412986961584346996806893388994416087909522502146079704955442230192139265497335728923862066278325126685157644572386616710747172479278201537503373960766928340877690606264603725663444327264878983829050807892836352,
         3101387055850394045886286320963937312378767626799094961097275328813194368212460091987291623787465836519314060715623192018490441096629567986191654941721352766943593085918900769028976217307776069361193139639745681191802731761631450741024287613424647244176521348933611778655346588628080157610500342501530977220712021229861230921920489082248646255278655826783342849449437833655937445135679155302011883372107182393774086005651958648791440273627786779440135132988510710343194837059737131589792196284069422239481908208308503871767820354752493489450610541635448252328543631349218188851524349650451229639201708175907855549930282302966784945293114800775568695088724659466135558609225247887859065343384200448169419443209233228523570616920954484906651982653567375530587125978592375493339801144992009754458298591888515542916516319262682303174340969569875819855015406226486371875397014699879682360905015205426949366452558874582194092243141422276674528546573840716118866724308340224191959551000537832193053768339074981963186882125871123306236622710483491653349947215715245386050530456788136174057283726329003175069330595525798189282726925523621969970576675833716673399723268365115311126766318555667484439643229339562913715347243739142487430186288743474825492310836280112994329479683173386846140284782371028520865347071910185644604081809266694056245502699549121852194422784,
         -94085298232023991026638561342778912826007708853142917439390345384600757153694694775943461215262588417335977403099092701246157086023365289455092181751316912962604322686318604099401340243893813205825077092078001964972301366083930602589257655026291101116302588908507904352208253060331719080549918939011782203526254472525470455055093649120214015556700743310083109366277825364236772025093199237585322787664773343114281014638626853911445340510910080984285996554425030288960399038270123873922581021059947198671786498253169010918227014541736862334454799037014369562794236814457128133505109869590744531343796129613973544529953664287892896340633036198061836511978049018855854881902682545081391653106743972798232813483444858096768695018689617306677062892300303135825984283944149874746746244105085880987084920016285616737825893384065629416121944449329635131573275305247092738867061691465261627215003301249687401046436505703101940760055441599225812028087167914886349745544238589033353575050592347440837463921977889872136171996292972465624064692666561776912559624179260940083516841304541534744676678028677211051427575887867274257191971875176435355659001134980303988313457159000068656612466927523113502714259104279461300571665384528418285186197707793509073520124910603179132963342724164860658695630024187460441694734380851202239693993264584432383013338204684907769269228199034183391473017163266129920,
         2483159303428308030255798857519401003465923207250121542635261914104083305026932466539561230121664756724696369976685604055426706516403336059811117270535206328837302012608161192985632890627328884465858555440832811294764359506417516438882674945352044369888539430765640881965662602288338594665599298600185802514371596273456512476849397969429177038110681136849390338237656020726029989216322592905382950008530239746556747875776407100934852728410975294073431099868792784557169015028736213386821687678289560322926907402046491802490079552711448610830730000661590967169328766527928428109728218686937284657221752300087163283666228634002491770563779241827073242367597258158846486876867517307326932184640083245762963792594063977290484794328480429731999511467117498930217342626059706957135901018670655019394256619766035850251935095921944242288812081782879442354085654793310634205482986215793233959315873601118586610465988137331532741112486705454005764175420944176529667676794084457617577261688005854455357311664475486745295720581285538447323610346085104477115004729327630249300946701563030469137516701022927284978316442809657664943341669404761394343261609309469469637121538836363538136777457716645757515853870562797650500498787644577169151312304813272876938975139656519840728309042102597748360849175561774982682137868281261628014720723227162038287041341076132008229733978552572472247982833659509711764936692473486295669774745600,
         -56383806046529719497392395069368405368335079074375460036627488815914081771453582218090786630788151937744595768477116789346568569455772688441998290421018309800375924477715400044508822099881856818616791178697273998221458995248496739417706926670770306173022697981054513448163923507013658120330826580435428223480397277711069662606717805799800606121763453609654318953071590072773024016145710129349176140137679993990747703762909969407333640919904043414097038159981908135119922130691019972296207736476695425656771627966605477162412154123386042314645478599463773083426434855366069654054923823277803114973766877578434517976722620759363681976082621900195932887462229246120073419260972816009366439375566594144521111383145646544273997453372215293467297011588167570295863370934450132154002869588015963973307492599382045997635062931381740270975009297092732421698272992459024080250059470732719069835259012303656811020427669357440654578302803696707495094952987224130289689965552412720884454762082855262915801977675113343993058541683495309349258022641898885735097161824729982180896329577536044340638369476558343993576768194941151754019471891531705964325664601995671142855482672477747970178721281852126567569384910344637052747142352125110512565051217106418692460250233743745250618616548756468526676899389358190257957140992640020738964209392812142529008610226657929392304982912839981435584871823010976539956046911909942839007919214075844092340867086241759232000,
         1086365027808886102014589696005353914083579856369954148236557313039252502140171055400084359917543910779238965889757647791785535536343939562796453639996397838015616263695582657215072618792249888967918564010359155282389917530249466346840090170465263735483024030260844825339215129639322522329182506210832823400211685840471671016409381596916990485754277244565843367092175814316545635870786662789360168214936183470356890532060964630585779203640673500670879776498484186894185198699061245385901073028902964475787262733772893938867967623077284331755450480866082217027501886969275068032255179048014513012499420162871786017388890985042115846964028538652035520798559268621953994162744547404723663074457520522967109735095703333438379735776593749742810579542855026676866089305893352309258956289455303279193161353568788148895020167454857631241032320016335444414434022268533626214478549872887831630574647814741363124756990556501618237909682148068507279969424233375172420485809263802738451949875308655555378671573186215057614883813582324382736180655169261238190053487985372706589581380154536455613408282673776950761918507853061476632432839262258560907067733516041297963653157143567877857291245114677729404113721619166277174944822777037128576118014535447849137402049361304134350560490037515171622572349124214985644299032584270444619174908700201364088429894683808135932932733926017773050372363781145946739421149898858061386037391201206279061156076438083925599228994462189080970799349760000,
         -17453548902347080773532830854944826720012523672095589406550184448039517821886938862323204019049037930279193654740245465440362657014722075896879547950884515763389662868655628508645427188998279244385691099765948899335776005690882632406228422486866601653671223753388048773984689650179331204240743537894926189401489497226932313263772589077145925658298416209547698725477740126772433432910887423218615197346496745092524875343353112308284620618799314805877426705003947717708982593566429729094816980283919841589983328467205704752752105496239031209558272353724871847185271113905988808692327913670791549820856348449058162882108258259146342373496279605605607721276275834399873947654169960957132340549211285306347325804110491614150546418767684186653068747084959555194060437291422404165521947229305570922943902711172364431992271394553178315566079453436354750202433820953380068412501261327960232068204196981149385116347499851975258792071436634875105528662848511010429236085703958650441914344230089982051688894395805760011013527050879734573820536364566034616112568913604787061109766594456239268456487768590798682613716777737910147994212294517424048471466424595776032529685148203945816803450935220294179678878492336773115633410576149170458400748661225883674575666337268876737913862765668539325996377289003855387759513375902819197114145573726435293527283516895248087715175099630509802162954544871450886490246145222106558344703437015029237352265163635634942759844596193087978868254060936647259147372368226575974400000,
         228554439552547538793845767488064144178464811441640701194117533138183787958040830312254778889138326518431198713160701718188943070110608104690437142293867545697588227228971408937320531577068079733610634864563939499553030525765610347225084626662841210558103212505892740071833043207018086176703749314700389728186400123433747201657899831820301686794271561630031578011549287970011602447899701921474111882832795117107782030011074881928455591531892438409096689812362361759684143114759051193012336875163087613632029490154122175274869031796000849213551364299478028072182868962331629082206923303524084341548652451527600624236397714103295954392094384055936732251290904372532544033826019641455115555473620611358208607752583172108725414334314119650797042633182350911326595204064493523125683703645815990491106469968369266626477129481257262962944926159801160317182721754153056907639207102081699262085371288034839656132396984946562845066016136991097336872112164035446369563946604866694075548316302934128649664491625611216571996356377765819327793071831523023541836335548048082657734234944210469558017478229408061010827022866922824809834022757340041370211347744777061998016297159627890676395703874911202426796187720045579182995046989048144504711949075302571574714127634701051122065323481755595225273717648153672748534126806161994568552650432862555817636317666251235759835429853222075610931774793503047852737929199013894292193861628426807126205968148161829446857812751774391386961200245947566714893330865523031630839914735560047476693008384000000,
         -2365230749069050386183195943212625587253244627405605471938496621261957358153952871446831600497197043206074581355340739444000393575479372681779616275555600811069031650581155007160553803599458831892201926628249531571783627893171954591070754800822781383520013084463767617694371680096582096223272019311805659460744637224385449192062792160913025662401140903488647824836714083423020847532256236353544153280806089593262738424382816664976158829062490263842105923757836680157651315570988602434991751320397553430510721135786300234955423101511849016163177963954730496429707114837318075538056695470012409807881606768545489402769136583862919462363014234806396982394927468288116456205912188393247661213162625237166438594713217472488609523463609904808726365980934915499660598573205101837852497327308812258384804597775473214426819436932833782134834148443510677397556748228033457560305517103930302724785905666512263951042779019259938376144303721810797181202219808459500786573770134358984056161356205444572641836614438504598043182662283186173101604195431814860973390681745868577689678267042998948076919868407363239926022089992188721405386858465485138417165908019102712668590379331551302843027519644029398693453837326312613473169518189220634761582349425940018054469875140334926842870740031963163379090699604698730151637063518951656080129127942801683949057275226861744957448535538274660205730669168037757869100638004771196035810565099099057572692677519948927555892967462472331227447609496832531638469944861299580495407920397374991659545740972944818458735756973053050880000000,
         18504268060367545520156248241454152437208631807825182005805030829613581005388775481426159975440458222696584450294931162422307106415540842603149605194226013205634246197203433205204600727718868827717140561535046012446350593843794552212726509297025941615079073006165520140046738551994996335374694603136652452362983820068967682427863398809165516711886264493979843758652288450431902964719244470442319974896964996498307540326804914560432063251256312087295655375193820621380962214245075250456085226294391678582761152649164565962208941329145916382600021594769627147391265206630367063479070025330564698284954690109012370070235727971139834110159728308240683264011809230698296057789430387291736780250560252558137239845978682901847318680060256885027610042081378797294181496686122260580180384416147025296562737411061739049223693001417716277169383226377360900102845327098352466332987677252081521390317992864607298321546222956478634155199261760556249036888710817066095190814289130990203522027602224037398700655105105548352256265705954658978269632681722523524685256567208794043590190011648788489861480515925779227249332898871442225856750875743218985870129874693132386698442020534348416103919136857402734497622686356673649682513545834175474951504421735153617122761759762220467375362243303824773773470825015619990822664322528569334897892520585435842967548179595059900349236774659232367071612022575204549549838114608328889701644653737153174918664269323168216991405927885492465220224120987821760123567303202127510229471382014463382618058197052426213196807929971205461950222334672100236042698752000000000,
         -102121300755872360390208326811707090084335431604557899443506790316931626951749757797449761272784309063471713606828014498740289842211205757187905425703704061744988443406555063712463437005322126450199567186081982371706502151163754289775034047975819246470589143074462821608970127353892751214256246591867228717637962420547955741251833171663203326347982336417835621377390769522787339075983660540245492035190655425938973988765913847064078720962200163253305605114100919684472091839973220113684418720083297265401251182934507745510082647412397170022630591186038261050782328251661145146757379730320402314768260480401186118594336908979252733787412431686964899923860471616130579255885358700738930544443408173166236497698601229710438416168438425154633625784485923614123522114245893849576448338022972339633576717390586164578897016597435098541431642860383656423591427330021683383803533446194923813327186285271705421374451148644420579035462431976573303708726713981747400861155121165285591223730344569268843772554224527988022666553794184431316023760215145255346049989552443260073374417211020650993594935391173971371828348060343361674378235103961631597043616279026504493671028966229410557314854358963845071223755766001310269948822071830485295567029644522007420347742147833638112806209902490521955423494680722920418828712835218554396392781425068492015814462488967486048512951545141636722408435930317881315500913841984405777257113371671375212618719752492783947786665447073883989908185614727466602131041007494049733698882501158821854601665165210896734784406263133771450020976748859757745255138953237686880233217204445773824000000000,
         351111016475209195283766900843919440095624146556789122173523679349777966299643262946911486441519899595836313206665259188334489481386811669415613061633330336546462001623033550279766276811907910101756125184724147526962664068689856292543312405131873200144379159994702985482614164400601699293080559337858467655741887822809519560990775682686994365707247476706450961807632248346673489553887445267552391456241718215120101212961220576031121965284982741470353368709247378580638477508361005159120419979700644961410326722640681867856229412089253365822054781566178423062172588554088300864113585701738400052437208816988111981193546868281391860489532781363879032310591753437912409827015561050041957997206729821630894825811925444451854437113982292632688790960480604835195133628565655076586738546361711654366224700348047604614854859949188538174522057239370067864771855321705968996947970552064003410336336258240895534618017418772953674569392712141968876427185835028862214313429418848062095857874923854380237004131047921592299908449452430654881715883942437341771285024408919750090290109166202309575462048068748117628665727373204753592490198989184287908129443020777117583750057658261198289236874019529149447754905177113223302118360669904357619810322225390384715100689690639574952027705678871956881449393033655215738140965418231063202587266638122875867766138043116514847722041943522616825697504190117825457161727855692529260788226397711668588029479351373533996724814248169140806230517331199950259670563214321827185682789009620346593802377537571368034041415448770697066294697590423567593434009919942823123585140241166847349494120452006391879355596800000000000,
         -558796808323730669319556209635783295834885620059919926374094337704783159717074271411836333134523665196320389949347494772111894391675686207325966425834299960704067893587399438455588798256988677645323754039263287748208073986571463630315463528160656994318592529984130595009567451280996658400048531364622161695493916339147237654817684252769754893117909700442127196991419507042220993245901638767780155169618789002876156225189025005435074977599662688324284914356331507363920217213649363265471629867298901042969782051702048331205489077043036293034833278445116394956666071142647788227115267116515688528503660439942039494813585601143257498959633094600747201884245253213502219269954196213677360969825422781823842862748418879041080125872976097659234935939843831969071868329828198543934025101026210448471222980313395095525993255690522050851267688859400798423662402460712473293804031118694749895794657538247539078212884158148374742509871449405839026122122675224588400629340169111504042885900750205878286033379426390866888430718628034165311726393903801759108001438550475452538760373040235963885593125407487287825497248553858899433281347776274390966255070668382409772465963176385751904286316639716489828285928978635855355970747105034388038350319447352538261087880109718552603329805296866567042793649019459534848470724032360639799964633748905196867853384109201940701530483598626465550495679048159865753998874913787925000267970891083136549937685688617570022717038125536572098179693557126646776084768401508922196353445609647520847478177415121380238111178597227153627832257799928795216823511402005832836435952524795942215581962882377976384250201837108076812047801647103999999999995081]
        a = [ai * 4919 for ai in a]
        print(len(a))
        flag_str = input('flag: ').strip()
        flag = make_correct_array(flag_str)
        if validate(a, flag):
            print('Yes, this is the flag!')
            print(flag_str)
        else:
            print('Incorrect, sorry. :(')
    # okay decompiling checker.pyc

    かなりきれいに復元されました。多項式 f(x)=nanxnf(x) = \sum_n a_n x^n の係数 ana_n が与えられています。フラグの文字列を数値化して cumsum を取ったものを x\bm{x} とすると、 f(x)=24196561f(\bm{x}) = 24196561 を満たすみたいです。 sagemath で愚直に多項式の解を求めました。

    a = [
        1,
        -12036995612853156936286011036665,
        70761097437137270936102167471287642036368358112612482078746420,
        -270760577526471416726990241906082418991632930940814915432624543436128198171540530830459237956,
        758322670537213986632051073398213029056006764596691972083294378230604396150245020345345578151884326691815883061644661233566,
        -1657421720674295825624009196807881201156538425172549952934830837304308795987504067118576756384156695624672734346081929437648667598699921926783270422521766,
        2943390021186099695792268081013270881974196667794829319170473858847667993098751630233061218881909160771117031173382926124852410895503366161910086019204972875909440113347847703082692528,
        -4366383100467886811542338093572967906195986358001996645996577053050559284502186031169919156795228805003943383975970397387941387036889498492298331723942560238222112799249196225360410737774072015110348020353373827960,
        5520657464469375535085168005278119107452847156728963520071940150709637476374831684702730463162156797567804625424109791905935911485938940718675728473180762771955765250450118860586403306394732944683432805471041311503536936944211189737460455924147,
        -6040409639368566992709126213554806987805371061694777329555656706760189034740223003993705173076964844299286729470874869893022046365061841748296008630479942340847091453888484451104939876908871692943720179628918429033381977815457948153865807902121350090290570804279375193602547,
        5787710311953879633285309790297805038175576804393314204803650513323659377622042796125454467459097599180897540599672003687739070502385355827172336967661574794985226309399549992624547488182752884937579198351198689666699458701951885339136849427145623150163832591611182849332003464485162869766637587885478556,
        -4902642856751823968634429878262494576942716632047065846096770707728050182094968891567439863034907111831499802965078214716310298694040760316078813885901640406177102504706129153849665291022873031931149397522636563766789644071503388892322207399310201965746021340442189643918290923656823709309501519938717556707108603909365045056709662756,
        3699850006647501865381238611561204533954703596513977828245676687318619534759718394402547485705860055527499878494128302401350380880223847931293923712337830237696802484457727414040654050267719407523721753192192954325214018213886396819789763444724570129624497191387288297104476948209378314234137858016046265182331424030004663522013416916037839106625218484426766132660,
        -2503381664562615076035240043312725911469170509539322500963060841759565879950256432694328993012308199988929777908992648969277299854107452845160410508674734438149484603725126661607768709388709681121690616031411940270274531444374238202577182185377277536890746626118460104352336855579280862046594281695818828156430816693314911283123811829026498147207443379081851667392858117124554747617261592816308,
        1526711982649832550855518449178503829029850196353340802722606457634130620564821108469779499400756261224981382277459193658070861730121981192168711122342705299717814974832514426062327116393221946424916651023156518640300146832579990080903602768066190773540657708137665151529506088591181435588751034797257100353999653716239281224498714495869886616227365969999573784940771441781206939655753850520913539801350776211377271513357088,
        -842953984658658292309510977293251848508894609669997128814435442870981935530742340510532805223877368384282567696998286537095818935371349496091992146132001033224513854255752104540729586337863508063208122715111541501301144174827858857132680974685504851575251455307682302858944583075290460443600124166839500924896625206798501918127708303976904999741341695577320396134799421842795506409025615990094842987072821320651683929011822064975685462916516303634902384,
        422957456346049692341260179325895120684306237587214440494060245900277276657408824422711669420970014541252470333424859299500683275627006833534458868099396756712403692034269278482475139778970259928098027505102261561696249081523441920369791104913855327063145952604829043400103949464549772274121285034631499395728985827459374299870918290675603992428269671561018421791865147604740385306434431638468274562549300037932417098966321238908971362894129002412253266375766405005679438286791278839,
        -193471049395738297286458805008441710818481314825008770802571970679921027956585779537146446202478826950609736190194807825172632108912451882150093367246069044488762341087789876850505036332625451817014469037252491095338851035060715916393889488131974277346811552813523419091870330932321700273143277767115554985119661796352126474690109938223183938799977355475441400344426820861005586283940508501077301414068231586227057423191408340604559735999951401257465421030330286465966325054077255711362180689566758233710057894255,
        80897019154522265075962219548924972222636436750698695412227806781614120103433659745650075545971461672119108220868471749255613126082873507542167152903323879673774863333921546276134550254063787772245388823054886425980368342500816004573653666051201586676337846219409626502611514116162491663176124149268640462530074761560644187346420467797168402893384721587821312088473414828712930545669393960307822395265305548522184928090121229933916770534435506273872305818497882747209394943156010257351777286125488091273714057213582845077500529261868638114252,
        -30991157300659239962382379273689587220093781503633603852641077964766598209918780899862581405249841849580419484848937380799010280118110445100888261399985637695322985763319508483665087943432580280248542847142296516292494400706795213127260840340509645626416202896383350832440622296307920492870297868526862473426648809989495535621102471769488591980750103724888710559056880674173904556134782648406165369372034571096268617505069957968083950883339999122107567730333404604514354389945203159871211134432651406540338255858951994880308146641090354413931223004687783989063555851812332,
        10898530321547862643030259948967335811934203133929192367904890755259294271163493443682870574846517241924967062455138765967329006707910465682333449349018835562602309248817129871747335083073891193148294035699570875945352432067866706606239164851406421462058420332552965055414571465939437934392338438084667282993998949249796333219837811302814971298203468153586251416698554237173187673308562671125010808183536298638986822018942577788091825897904881920744165279001531298651176433961621534597834724217263194654167077985702947958677282348353458897390629629764004013036336330880093494331011464289634037017059214,
        -3523891268719178617759391809696923916578965284368737518166062248827788805300611865357813506341470316533643980951649555395173184508027745014830255418990900729340065218020240066600234292691672294001222463962574343779827770240884946876825398129369449011728342610668390522641632065198956770679949718117639126401069096207516245707091485711900287586853920592094560440500466802097357798144178495254141758895862331325870996171907708591091005766433147632894475782971686761833660787599005566476381551522935129751766549571289862929785293475659486103842879638568779437560167848869297989189727248020161597283822916679478127348097455219687020246,
        1049009395230525946835204327548745660156382103007727038340730605980146773881703526297708742302344392073696822402637984418028824535544901991033420144943360862855744087273191157069965996576985065241424052402265664038379601376920784084651410568081046823376484750182911675376670592592771684011619580226595658630220330126011121106217256782282379027503421884340258486872321433471543280048339959424917173848371112774255068385431165707257285264232385125302656416873392160285571621178003766451490132529708902899674064109724216053072604708836227110013896479251077665577991703057909122183611797152552009819156835684806785365708050958996985688682378524937123437113458794800,
        -287810500492151548704834586633173910345516524879889477620674537190071503503969609698127410745501217046444634733043868178114301412834111030692746464558172261410990112508955801860598602133422753742672612529928573095791568079235190936246876814895150614004510736735152739120657011389172288819540144717236381642829677520679733583800061927794000695383881260491154467723614815557782051558785579254134658030800198262855045952024611446314567918327599163858607698407896819819204117370134035811842960931529124425186496190056990123089220803115260188054910949673201587132528301941935571927957866486255847354681260531046431612165489961862452805031601912597827112293802459202999946017946157963701655642776,
        72840318775523772116121505571723194500864654508297281644035338196315714347706564858121752344175267740057471861924492906827371905580196416981558219725458068759767367613231287267276009431156938141451038364085993554531012918027557882908586474941671885608288696599907767591415770050593926179331528859532069108277391018847050018627360239651375231529713021740867660844960443186281913821951530782331193426282652133390091334505577047329661354861141452136808769623993046940515597706687313752959732361880320118662945891674094728822609014144417184889570853661896640972097678624262109845060262858334075199394582752449557111385061948748069431267873951357429685102744784262058549954007654241063166381981051660360611756484304170176501,
        -17015681558771486155991007955035116076916512293462793673073407338981064531587665371425793544798973639832840416528082008366412403683725263295689004989181740798880208077137794154071759428250102191888377308958606373274224612850521767606720959505007813580866156156201686562664735461061092174619782430311775336027983211559779031600313037713975778935175652360701138102690020160409221296951380222517370044659713252826142337434715993710821121572661660190646046721128592648492458845822598408305251233127433350640998788686337395104295986523640915799392273941815347211960667381140265313967220495404639746907765103117552471119949192461455676214101535861346059114627017679625753522782636018574909447911019663571364150056373926806128745937931845622487846513916357,
        3670505643698807770496066549426487543044433524593104400967542140123349295207658297244298273345531843471130079868055038715113362271938898428021857083393078228958671136583691637859204161146716774861750866178209789574618404882196694017123685798554854657596785758770974107278226533128136181405670440021690889385703391488781866709126016548106939070579747117576098992359377394228220706779447361475376460634779182153078870817436657882843994806316089044877371156374764956933108009686399110354159952801071877914638008129468833129910897809624784655634766612578004309484519800013003991085235735139951451635119639008813704432054380393531786554450622153409865850256897448948031152704170233538304141312860022713268817207516719861091291449152357142927278885744260319551877513554838149764316708,
        -731315297214901799139202226642962186173776982258102506692316932763795032743292377175890156601824196328936745458544624900647832095161663496247587791976430523643899796449952629749116002156959020968317780510578493400432452293359722025285359196367572082185313124359138787551913136635287208128868743941436782673187963177174300058482024530962694729576411128199111690887381708540666199323867911914607653836035391796042056384719339544441615296482897832207995788092952960885600835804283408893971607314409051092575924442423451556806111817424915752871597371184293880821660039396769305892714235730696644882917103959109487994369840515373474703535192631359911662003579518759973386703911657782084238830285947420510116743089010517439974565215592656374774187712404786259152981895785366773522843906165969941852247976278940140,
        134588528415837658971047490199075666835983514159390616681971680164426317794252868732531422532794593330820045723106606802769644664837947203224317121164306807029000447752334411176404631986731015901307373679874408259122541902499565332320416372409756172044589603356069972918336468104222848469569332044171922438768606893049886354059429438450092278088448540986615736961184575742243334957502069493588758963135543678872507263849640682527958179823194776330017218145694418493002516852248007743753481985830130689353474387451295435005293382566297602196352356393211628524787947139580665041989232538881406837165019870948901349858097327606819982116039073752567514780339585704870050505509505256216218426474073520589165338095570821431112177942187984453099693299866831437635621848517302748465288485887387181042050531984919565966314039326910947728329217408,
        -22875957473830912158559251349753119246246028439796802316189907676257055443164950327490301280655070370706400884237611026797386817741222030981528483512198474831291362720520009743010823019749778972913806276343563388644805865738647488132609026766722479817157773855452724391231191095182981857349503286673006225897318947019340122022447099210550952673020554821684145040812316573357274661887067747296688932259213795508240113558452300792402515996550037064993418610627398498300456256150668739383384872747120275221990446608522768652036044536618045251875249988718794874912625102101906638310050673947622263770603322155777161417005867653440423144342108575510122918652004346881066456070847132919979266397792337083466690636480187634224063775252238228709568987308169158240158897515505856720403103771596160205646444883300697213872820817251033080576927509135697321215233329106330789808,
        3589904214789285404480068384761918869315288025031643288153057532554843931071447074908086375777364597702678619183887538332288430847470452127647273778012444791469468409474451624494740160128549964698187914675061260752136238626554900744382507017799761805307779682225136113403649594489191570757212667376997014713445701475742689005593760736255290065757769807448625355293886110432977294990407478106332258662633198134700047936979088736590113162886959370847964675936389208698875967627192927493287173549157788028702937490448050270980996250906060464800657700349234992558996788220044197097125909813953778354228644265668860678027657675211666863791322466803827732883569606916094015371239906736135812007615890817631618375310069832835493824353168053212807350860174519962686268038993947445302401334982305900192811360380608647169876351836071213350870612123317150854229830866789504543395008833625678886029992122944,
        -519880960318731666430752170899676999687923011737328772277171012154760408617709494489651643230230317134795813643458165671280798409467487764568260337834609879875388857280998705324361399939693570241389572752134220032855092067154745695401524070896550104999507083873790541672997884277476374108790678607914813688796265864916310482243621295926385845431074911305632755546516597507265144364486330773094771717722561193128006945058747657129516864738139958764953525270585988072193132182627105015267511014105405260622791006682971059348191231980276260514252684694437137414057994772094561461123223503768270104000134107269404230155327425764606525187765761456558872254546763623783499429014442184982711860102302038560964398967793136357782335828049076815522816586286609875139235961963707678414779338620479718331603957843322541895929561698036486356350864694867528799591755031057961849031951739529713694163603138812177986133157686015726651573824,
        69429884713385519751805503088403128841373124204648141141369557369850368626425749871309239763674129324203007485411393556740669800827041173826537358213240252978295767322831541724495231484909646017525557000915257754872590949816397791527668736709816688906128564173745358473501683791937201430965764436743805593715745195102707507491011418927738183297757701941722461003975971280206503094157086640339571802861568004509369817621968821258295937724890951314316626018408950261505815353708750916096943936090291423627820548696325157411543577774295382498366355705624347323018207984850068691801434427828466555080972199328155206204411299968928310320217415104792594608789293567566561950268093599804012282939811790029753693443241547221052604690652349153683419052611666910656948458241685482318354190774781749082096213552882969802531327789566361113175227055805942995304709347132709499451464685081831301778561849204505086398426513624087039399886290697740323118572639119921920,
        -8543394068815432991763301895204730377441561924064714761176087433415828187835828401957576566087962793744084441592642899522687675485297774268406707441844139345241926863597925100301493126461304582808193960154836831369920793072140462182730468702677668350691731033390662890450516780149634126188249753495279547823312695621054370210296296728468272959404280263030990486358925055833048336380628212992119351863937949121897311911182483670369328719059780568504856282334160434756704790900663433087715578780003018360761437438381068669811113988048911671665720416602428753820726002339833066009638607502954162251961838883804012146937019312826891273583407556902837524593671107565519084447405218842440182065641098520045668390585430020730818486725980179752178345492643732570960987728634272499990501876057731522386499062725301899266798590899663300664566445120663392552116765497862659401508620519647961225734325537451545861625438398505542059060021597382826088641647311379804097918646714609880944784256512,
        967581803550262158817935482164955136811949811524635447888347031169952727906372415527240136382291215289000434424776953388613932905490841789159652902076532524359709368803379807613404304433948716228506367021414788038155641810842356360867118461941087114325113320634236383483784306911108158042070956518697216591869161548475842987308114297120134346935509187423252488005387861165813608871165904875168924047936707163985567709604945376639246514184286633306136675521555599525862672982677230166014025232977783243089473647741874208594579084196163472874095851579200595790078948643950170916722206884845269885305716972876161098901162821790959020629419969019231951721210187359242977069077103149436431720427976051505461591513448614280827125606000321850488501711683961615922476319278142325438391009310435552202267619024958179442902293717475010767009234583199963324562799945703700689018917421300635423382707209344210975760279417669273969445271468967684121897570827045551198545121214210375660602307505320953850733500713837402028032,
        -100729401944560042968662403788161784328711120909365913662918082847787894281339591308004463475314174951192206568542399211905459633821927934410154953493019848279814461375941354231327650274343193876824539291174507790701547797761152980589416139519943258696989004480414390217542117839298720510449759239781224769103374136668394886115486939557712150814050817879966130191832802508934776540607332752870919649165358711935076270079122622421392739311787342888778377353633658029661776700540843792246404323445605147691524159271971172124033473381675466322494228394610259965787361660966938435176395344982147544728869114983482951336147065552430213998661140246713013075013990229018738036773939477628764039571656484266117812419888486241846157872248265382135567140427587825581805632560382459109325379223795244330555939470874299371611688785145489582815090316369663927406723813171281425171485709962690836826189682829097472498416111946924420015387733929223167312166445286521371714987896926589106790881992944774879802795804826772644994247261621645258958721350793216,
        9624391485665381620062003905925383858202059841614400276309628554208329968294066038142455973352511508185137796886221532601140792267497719577984290252693998764962878667726919466688085558544972875470883938831589941755036939614988496722581705039382719838502180981836514849717188677862771906224282717369780313244099458775614116495884990831026224323545753736052243919418041836107503867881344356736832391919574962524425784148394054423208444735239251403585546813070694601107220243103260584884996569307050853101493898759071106677138005963842635522409131897304479544446653761852978305129719974111559538844363974540765529172156217602706197243538565388357751724042939397905543464705139724154001242348094194170046945662384916258467706799521345632881280213524581293833496013981663445627929206770004742070975200579585344768730311788309886393834757240915239106805461725233846211051047917977639986126841271623651712673863539710981983209150974245828162132183716939475567697488281754170583353897297832680457108454412989870213540210333811434286735136137314970738552841947829387411042861056,
        -842492404626008202685319651978703524968535073885071398410419159861240869586642440539225248124224511521907172711800016984963600137199181988633107294911875912120260005015246691432361172554584819048707646136122248580162322520572746608789302989723498414737007672350147360019821312195497608343782508117815638927480027996092446667043269627852639021945145086975502630961122291921114957594542304192654666690843122076482066879573860278984351542517100147902984691032331485486348004235293968748901975358132669803180566696120863753308823809290593889373424936044813996869199804401311673361775577022817521697609162717332479288977618975264112176728661055437977771565445010309563372970595729169439495990491543574167965927591071875216493272223431598541263599435634027336365555864551872631551720258952467260781636711310327223848949805936283820428234996715477274066449157482715624374843181705444861922403799930885796437333357334418322356890504567436395379730767291497946871048337011309931082869853253739245531052661564747098296018352804417568682470998452641235722507779290076828097405133136327080632735521080965488640,
        67428024051081025925591476245915116672250518150516973741195533592281467551421485671097277700858741205095135112305648303857667018703733429216695721170757172504046315741034247094892324585188168512303931897603893342194104248514308147827527627461635056254515462642086613025038995821855526262114684371370854550443138828641381788022075434615364549597707352160350502137769784421209476085023901585775658784900209961846003234382358641149609131656852549983919010305909734772253837669487653799897740050051174257339584923095683150842090867487892050045150671143216477209891718291171092107350875437510220426311887233906513846747496502611017497551120008708664211560340552829090094255603845983533954267640938719639732716226817586766089646280315880236899473338901331129758327947908156008730096874129398308975074363744722809648716832902087049519613272638253660861524814197467763097655827179058895307228051531509404114929209526099035553896613687028796600501526245139208098418741187399499542114536918525722146057084976571872324487851375916146895335581854707635445886315884400684813873059159878187108405638401637874140607969333369323247945279766528,
        -4922292712232938264415179659464215370662711186447138425768198910030247121483908029882072055004011433976767098100059890647944529852298117601419732200032097424682192387405740406894198187920668491464621437393392891598873264668633861747789169891349134032953800795538573013156442268988900912520059500455536681162589415177296088649517794165998420636963289333446670774444146277712213720321011003242744612419123756176407637446138672858993718737850966389017732963748590744740085759179587505596534350992775130956934570094412325408058799400882668923132955060293225528852174345022305835042908880809435016692397099949056390534302548468712906792996143279259466722156845705596297223069359854714796506957214913101539973056110869430503475525888185542270940114557118860984119925177978935431895926475986669969137975754791956459436212100236925700154856698136153589133756914365450711180871094336927270341057213630888377919852900470311828485161573220784203525792104757861703527234978027851447377829854349964752576238255020757939829540794613891088029049857718719163321862163423073539963526927071471956581566465764182726646232313958522615838172067203185247844493669071017940123648,
        326862606953864243994493025571134183097005580822780665287071298443081452327938333305778294923037001048438114660846596409742529713392301897806894061265193635779528089549402883874711344165100632690980298793665147524103829415796304244737716583196489483916837646803947818365190608720226847790741849622165416960809546915823920897193659908383134985352827192072351013882126550670892040214634785767443490039675852627166097531693483669590126562310503573755513520132020598619973038320272032263539657727164546914087012099048929266257641343101555013302444544895835106936485579405990499293798698470344993537167549040994937014314157849695375247301011405414174918655019370056616128978782846799001460977274870686964948775750888536510308562913346421648132415655826398062271703664893729458073768599043232542509149429694669615401791073133350641637773170871728686027861722152104523706417394682646168856499176640549300500065095819378543943745831390812727880073391522186051220628185357000978071473952555876171101920744358523392352209875425765525843590677684939171097587062333410080731740812032283150820709437778431302084852208517279195742515252856625029333181007323666501063338993576249490385616362958684160,
        -19682387035211213376268717697596140497614877189167082614733127831934324570394405258989922416860683584536005682033669989287038178625524894503320821890768870715206162943270433905346330508212859609327521614319152979870578673868396679536205235437822587056805455938795571774651221022091758594861018067247339506032472645954149058865571209565183478642556252818177860385014727648223802030912253092284265336920379638050823223266015860719202316169187469292688078005492396279190841933920496129607288530503447126215551758467717541385666331403857069861886434654786393449205627350759445157856448608818623658216995073590007215954804254039161069877899821784190232111689738307708735026967410876100674313173828646976587680347980091053242397435225847949830410457558089691809535094405647526489373110788230979215943821142612077101128534145808110206605888000435066417917668089916668221660767875340564771757275331429557679680641720939730206657217449356154205932389369571237701004926883003166910951594087824677351974181096803598132521166375417042084428112636119358375837460531060765885259384213020828911889933371668135278800378252609635107431685796476922066486810191997741282284344241550357281661270805108535270573961646896367695988588544,
        1070896196191616316015303680542550811956468685944427279147752959700207089917239467886512325543721643587527791346056577110912090205465000338177188460206621242639700877805778391085639245027051751962578067609608064838883028145504609525149289746972047127656761492941897795020736704894189641664797500678370126521965409324351790800114498025443782175111584199138727858249334752047341368010493951409842323016676088546544793991689474544756634091541230122258607778547261020335299984724548057500336277237260048904835941603556605672655689857650228255043854665375870984289931244853156989495403955569821592574946641100063970774905280171080907471528875126203409227292007826708163452462771169695414317844882862870655701282496065187804622567500636477620236729687323288912483784380858170572808671335289416972483447428956611253614785915339766882950545554862575330994051225365318894378682856999999354232475777971260770549399842068476931010699445859573421500745202380684293064207666342069523158323552720275394062426032864783927425455942853749921648124192386697705752956368294567641004375612155549067325365942065165797146894509085566721427622373093162968167454785964097673804587221024719458421724474617577409129057409806924433004663554030358993633767616709280399360,
        -52430059743679409140676659634909812852390092094873523945855130079540208603100124764050667675099313709260138385071061185114320558001251012120505715107071166824365758539501001403178863550736750237891884813660843505882703016207987043286357156229311730033375817598336876864434515030987676154164886683762916691855328399295747666584067664532141361423157477435373821695814284089387126564933841690228449683368442396831794734594483593577310926886058161836249855118231437436455481994257071614393100018349937137181259879255514176869034252699327419860291616419754327314287400569477750039558231525298966665477015818056335710672583745829738107419558800256997628339395257921060853593232920709469076143786356306800487914547734032743358292336231324383220668604384663161930390786401257347184707660291774874293129828898450485876106212862305861283925802208659858551111895632479646232402028708952412596280056348008195418624011103914693785519747951804988282189606816419956822289634969145085721919238843836260140506046929612163627105571981450705891322328921498910093903791871600508496656039850118610420895023546271932574701958310668628346303757871656294501495833030435897959102405496357639688026053549112999373321384745256886902677570202276121782751159405161672040265376070220244756090932953088,
        2298808146237704162775202991841285877160968181269526479374190907804941917180230543235021092521412498867773867942874746516770655419397130112830454586681343448935813945935165405113807216361513255297271660852922609827373622168396392720875260605868556391334645535680959894150210630362295697494246192759052502278366332379359528977680747909852125295551196165365312670756913949745430856607248958875535770920440407867526308288783071913205162739209031358353108979950233165611262860485950149570532891962359788071268167391244916091854376717802428845605830278381486735142680827536856553047056851026000350124601048578023353228623629583518737721484612315933761498854304768312975738200612975454537672388015840777856922184871082260904384860224777194978994859428951241034398298226454314844198908619766352258525565193568811261330462000396955217130745377898223574887918140876535002483748312675074046204627575379596394249762715387636673501140888218630838424182978461143922841942672073471216774140856732909291109039943348436873688422664560438187824237183127231118504281386440712365865492849216438790191331882453906875784656976896776339339154040632428033832352990203446071023604867611045787298006536806066846512480154804723381712301663633108328784160960383304977443452224900548647662677738675890124050796868693322448764928,
        -89764146965055102531318689704130078645810100017924833554149986473785572689334408873779717673364397304584584363147500954468368007417137789542706489044506947045364009270066572399951524985318311158892430931882643516308468369682391152755238525006501661710301723999194568382314286440067994644411796872821935744987150522746995926694976867695429860277136925196871176537890811914108016080332580278200149021624815269175634541656644156351255033627460492903953040121686704923438127395963791947152241022433810149859121533141696812548822111229653769709666583071230040829532070716526804326762032792306926418825948921307006410184215690107594231221778738853375659142790616490144618201811277699914669703496507924445001840211241893198526686582040515441438279803639294019911781332800654832503396840836677009513208278160820377063302464621856828929884826658395251279496283523137610388680551676476777991448223247060184111666240549087714994640107523591332178745040634679165757616116024947162774373984684575436581915662181383565221413340783408981815284787995664282614507514434355344920962994741421721055699354893226523523921307511533094991974412986961584346996806893388994416087909522502146079704955442230192139265497335728923862066278325126685157644572386616710747172479278201537503373960766928340877690606264603725663444327264878983829050807892836352,
        3101387055850394045886286320963937312378767626799094961097275328813194368212460091987291623787465836519314060715623192018490441096629567986191654941721352766943593085918900769028976217307776069361193139639745681191802731761631450741024287613424647244176521348933611778655346588628080157610500342501530977220712021229861230921920489082248646255278655826783342849449437833655937445135679155302011883372107182393774086005651958648791440273627786779440135132988510710343194837059737131589792196284069422239481908208308503871767820354752493489450610541635448252328543631349218188851524349650451229639201708175907855549930282302966784945293114800775568695088724659466135558609225247887859065343384200448169419443209233228523570616920954484906651982653567375530587125978592375493339801144992009754458298591888515542916516319262682303174340969569875819855015406226486371875397014699879682360905015205426949366452558874582194092243141422276674528546573840716118866724308340224191959551000537832193053768339074981963186882125871123306236622710483491653349947215715245386050530456788136174057283726329003175069330595525798189282726925523621969970576675833716673399723268365115311126766318555667484439643229339562913715347243739142487430186288743474825492310836280112994329479683173386846140284782371028520865347071910185644604081809266694056245502699549121852194422784,
        -94085298232023991026638561342778912826007708853142917439390345384600757153694694775943461215262588417335977403099092701246157086023365289455092181751316912962604322686318604099401340243893813205825077092078001964972301366083930602589257655026291101116302588908507904352208253060331719080549918939011782203526254472525470455055093649120214015556700743310083109366277825364236772025093199237585322787664773343114281014638626853911445340510910080984285996554425030288960399038270123873922581021059947198671786498253169010918227014541736862334454799037014369562794236814457128133505109869590744531343796129613973544529953664287892896340633036198061836511978049018855854881902682545081391653106743972798232813483444858096768695018689617306677062892300303135825984283944149874746746244105085880987084920016285616737825893384065629416121944449329635131573275305247092738867061691465261627215003301249687401046436505703101940760055441599225812028087167914886349745544238589033353575050592347440837463921977889872136171996292972465624064692666561776912559624179260940083516841304541534744676678028677211051427575887867274257191971875176435355659001134980303988313457159000068656612466927523113502714259104279461300571665384528418285186197707793509073520124910603179132963342724164860658695630024187460441694734380851202239693993264584432383013338204684907769269228199034183391473017163266129920,
        2483159303428308030255798857519401003465923207250121542635261914104083305026932466539561230121664756724696369976685604055426706516403336059811117270535206328837302012608161192985632890627328884465858555440832811294764359506417516438882674945352044369888539430765640881965662602288338594665599298600185802514371596273456512476849397969429177038110681136849390338237656020726029989216322592905382950008530239746556747875776407100934852728410975294073431099868792784557169015028736213386821687678289560322926907402046491802490079552711448610830730000661590967169328766527928428109728218686937284657221752300087163283666228634002491770563779241827073242367597258158846486876867517307326932184640083245762963792594063977290484794328480429731999511467117498930217342626059706957135901018670655019394256619766035850251935095921944242288812081782879442354085654793310634205482986215793233959315873601118586610465988137331532741112486705454005764175420944176529667676794084457617577261688005854455357311664475486745295720581285538447323610346085104477115004729327630249300946701563030469137516701022927284978316442809657664943341669404761394343261609309469469637121538836363538136777457716645757515853870562797650500498787644577169151312304813272876938975139656519840728309042102597748360849175561774982682137868281261628014720723227162038287041341076132008229733978552572472247982833659509711764936692473486295669774745600,
        -56383806046529719497392395069368405368335079074375460036627488815914081771453582218090786630788151937744595768477116789346568569455772688441998290421018309800375924477715400044508822099881856818616791178697273998221458995248496739417706926670770306173022697981054513448163923507013658120330826580435428223480397277711069662606717805799800606121763453609654318953071590072773024016145710129349176140137679993990747703762909969407333640919904043414097038159981908135119922130691019972296207736476695425656771627966605477162412154123386042314645478599463773083426434855366069654054923823277803114973766877578434517976722620759363681976082621900195932887462229246120073419260972816009366439375566594144521111383145646544273997453372215293467297011588167570295863370934450132154002869588015963973307492599382045997635062931381740270975009297092732421698272992459024080250059470732719069835259012303656811020427669357440654578302803696707495094952987224130289689965552412720884454762082855262915801977675113343993058541683495309349258022641898885735097161824729982180896329577536044340638369476558343993576768194941151754019471891531705964325664601995671142855482672477747970178721281852126567569384910344637052747142352125110512565051217106418692460250233743745250618616548756468526676899389358190257957140992640020738964209392812142529008610226657929392304982912839981435584871823010976539956046911909942839007919214075844092340867086241759232000,
        1086365027808886102014589696005353914083579856369954148236557313039252502140171055400084359917543910779238965889757647791785535536343939562796453639996397838015616263695582657215072618792249888967918564010359155282389917530249466346840090170465263735483024030260844825339215129639322522329182506210832823400211685840471671016409381596916990485754277244565843367092175814316545635870786662789360168214936183470356890532060964630585779203640673500670879776498484186894185198699061245385901073028902964475787262733772893938867967623077284331755450480866082217027501886969275068032255179048014513012499420162871786017388890985042115846964028538652035520798559268621953994162744547404723663074457520522967109735095703333438379735776593749742810579542855026676866089305893352309258956289455303279193161353568788148895020167454857631241032320016335444414434022268533626214478549872887831630574647814741363124756990556501618237909682148068507279969424233375172420485809263802738451949875308655555378671573186215057614883813582324382736180655169261238190053487985372706589581380154536455613408282673776950761918507853061476632432839262258560907067733516041297963653157143567877857291245114677729404113721619166277174944822777037128576118014535447849137402049361304134350560490037515171622572349124214985644299032584270444619174908700201364088429894683808135932932733926017773050372363781145946739421149898858061386037391201206279061156076438083925599228994462189080970799349760000,
        -17453548902347080773532830854944826720012523672095589406550184448039517821886938862323204019049037930279193654740245465440362657014722075896879547950884515763389662868655628508645427188998279244385691099765948899335776005690882632406228422486866601653671223753388048773984689650179331204240743537894926189401489497226932313263772589077145925658298416209547698725477740126772433432910887423218615197346496745092524875343353112308284620618799314805877426705003947717708982593566429729094816980283919841589983328467205704752752105496239031209558272353724871847185271113905988808692327913670791549820856348449058162882108258259146342373496279605605607721276275834399873947654169960957132340549211285306347325804110491614150546418767684186653068747084959555194060437291422404165521947229305570922943902711172364431992271394553178315566079453436354750202433820953380068412501261327960232068204196981149385116347499851975258792071436634875105528662848511010429236085703958650441914344230089982051688894395805760011013527050879734573820536364566034616112568913604787061109766594456239268456487768590798682613716777737910147994212294517424048471466424595776032529685148203945816803450935220294179678878492336773115633410576149170458400748661225883674575666337268876737913862765668539325996377289003855387759513375902819197114145573726435293527283516895248087715175099630509802162954544871450886490246145222106558344703437015029237352265163635634942759844596193087978868254060936647259147372368226575974400000,
        228554439552547538793845767488064144178464811441640701194117533138183787958040830312254778889138326518431198713160701718188943070110608104690437142293867545697588227228971408937320531577068079733610634864563939499553030525765610347225084626662841210558103212505892740071833043207018086176703749314700389728186400123433747201657899831820301686794271561630031578011549287970011602447899701921474111882832795117107782030011074881928455591531892438409096689812362361759684143114759051193012336875163087613632029490154122175274869031796000849213551364299478028072182868962331629082206923303524084341548652451527600624236397714103295954392094384055936732251290904372532544033826019641455115555473620611358208607752583172108725414334314119650797042633182350911326595204064493523125683703645815990491106469968369266626477129481257262962944926159801160317182721754153056907639207102081699262085371288034839656132396984946562845066016136991097336872112164035446369563946604866694075548316302934128649664491625611216571996356377765819327793071831523023541836335548048082657734234944210469558017478229408061010827022866922824809834022757340041370211347744777061998016297159627890676395703874911202426796187720045579182995046989048144504711949075302571574714127634701051122065323481755595225273717648153672748534126806161994568552650432862555817636317666251235759835429853222075610931774793503047852737929199013894292193861628426807126205968148161829446857812751774391386961200245947566714893330865523031630839914735560047476693008384000000,
        -2365230749069050386183195943212625587253244627405605471938496621261957358153952871446831600497197043206074581355340739444000393575479372681779616275555600811069031650581155007160553803599458831892201926628249531571783627893171954591070754800822781383520013084463767617694371680096582096223272019311805659460744637224385449192062792160913025662401140903488647824836714083423020847532256236353544153280806089593262738424382816664976158829062490263842105923757836680157651315570988602434991751320397553430510721135786300234955423101511849016163177963954730496429707114837318075538056695470012409807881606768545489402769136583862919462363014234806396982394927468288116456205912188393247661213162625237166438594713217472488609523463609904808726365980934915499660598573205101837852497327308812258384804597775473214426819436932833782134834148443510677397556748228033457560305517103930302724785905666512263951042779019259938376144303721810797181202219808459500786573770134358984056161356205444572641836614438504598043182662283186173101604195431814860973390681745868577689678267042998948076919868407363239926022089992188721405386858465485138417165908019102712668590379331551302843027519644029398693453837326312613473169518189220634761582349425940018054469875140334926842870740031963163379090699604698730151637063518951656080129127942801683949057275226861744957448535538274660205730669168037757869100638004771196035810565099099057572692677519948927555892967462472331227447609496832531638469944861299580495407920397374991659545740972944818458735756973053050880000000,
        18504268060367545520156248241454152437208631807825182005805030829613581005388775481426159975440458222696584450294931162422307106415540842603149605194226013205634246197203433205204600727718868827717140561535046012446350593843794552212726509297025941615079073006165520140046738551994996335374694603136652452362983820068967682427863398809165516711886264493979843758652288450431902964719244470442319974896964996498307540326804914560432063251256312087295655375193820621380962214245075250456085226294391678582761152649164565962208941329145916382600021594769627147391265206630367063479070025330564698284954690109012370070235727971139834110159728308240683264011809230698296057789430387291736780250560252558137239845978682901847318680060256885027610042081378797294181496686122260580180384416147025296562737411061739049223693001417716277169383226377360900102845327098352466332987677252081521390317992864607298321546222956478634155199261760556249036888710817066095190814289130990203522027602224037398700655105105548352256265705954658978269632681722523524685256567208794043590190011648788489861480515925779227249332898871442225856750875743218985870129874693132386698442020534348416103919136857402734497622686356673649682513545834175474951504421735153617122761759762220467375362243303824773773470825015619990822664322528569334897892520585435842967548179595059900349236774659232367071612022575204549549838114608328889701644653737153174918664269323168216991405927885492465220224120987821760123567303202127510229471382014463382618058197052426213196807929971205461950222334672100236042698752000000000,
        -102121300755872360390208326811707090084335431604557899443506790316931626951749757797449761272784309063471713606828014498740289842211205757187905425703704061744988443406555063712463437005322126450199567186081982371706502151163754289775034047975819246470589143074462821608970127353892751214256246591867228717637962420547955741251833171663203326347982336417835621377390769522787339075983660540245492035190655425938973988765913847064078720962200163253305605114100919684472091839973220113684418720083297265401251182934507745510082647412397170022630591186038261050782328251661145146757379730320402314768260480401186118594336908979252733787412431686964899923860471616130579255885358700738930544443408173166236497698601229710438416168438425154633625784485923614123522114245893849576448338022972339633576717390586164578897016597435098541431642860383656423591427330021683383803533446194923813327186285271705421374451148644420579035462431976573303708726713981747400861155121165285591223730344569268843772554224527988022666553794184431316023760215145255346049989552443260073374417211020650993594935391173971371828348060343361674378235103961631597043616279026504493671028966229410557314854358963845071223755766001310269948822071830485295567029644522007420347742147833638112806209902490521955423494680722920418828712835218554396392781425068492015814462488967486048512951545141636722408435930317881315500913841984405777257113371671375212618719752492783947786665447073883989908185614727466602131041007494049733698882501158821854601665165210896734784406263133771450020976748859757745255138953237686880233217204445773824000000000,
        351111016475209195283766900843919440095624146556789122173523679349777966299643262946911486441519899595836313206665259188334489481386811669415613061633330336546462001623033550279766276811907910101756125184724147526962664068689856292543312405131873200144379159994702985482614164400601699293080559337858467655741887822809519560990775682686994365707247476706450961807632248346673489553887445267552391456241718215120101212961220576031121965284982741470353368709247378580638477508361005159120419979700644961410326722640681867856229412089253365822054781566178423062172588554088300864113585701738400052437208816988111981193546868281391860489532781363879032310591753437912409827015561050041957997206729821630894825811925444451854437113982292632688790960480604835195133628565655076586738546361711654366224700348047604614854859949188538174522057239370067864771855321705968996947970552064003410336336258240895534618017418772953674569392712141968876427185835028862214313429418848062095857874923854380237004131047921592299908449452430654881715883942437341771285024408919750090290109166202309575462048068748117628665727373204753592490198989184287908129443020777117583750057658261198289236874019529149447754905177113223302118360669904357619810322225390384715100689690639574952027705678871956881449393033655215738140965418231063202587266638122875867766138043116514847722041943522616825697504190117825457161727855692529260788226397711668588029479351373533996724814248169140806230517331199950259670563214321827185682789009620346593802377537571368034041415448770697066294697590423567593434009919942823123585140241166847349494120452006391879355596800000000000,
        -558796808323730669319556209635783295834885620059919926374094337704783159717074271411836333134523665196320389949347494772111894391675686207325966425834299960704067893587399438455588798256988677645323754039263287748208073986571463630315463528160656994318592529984130595009567451280996658400048531364622161695493916339147237654817684252769754893117909700442127196991419507042220993245901638767780155169618789002876156225189025005435074977599662688324284914356331507363920217213649363265471629867298901042969782051702048331205489077043036293034833278445116394956666071142647788227115267116515688528503660439942039494813585601143257498959633094600747201884245253213502219269954196213677360969825422781823842862748418879041080125872976097659234935939843831969071868329828198543934025101026210448471222980313395095525993255690522050851267688859400798423662402460712473293804031118694749895794657538247539078212884158148374742509871449405839026122122675224588400629340169111504042885900750205878286033379426390866888430718628034165311726393903801759108001438550475452538760373040235963885593125407487287825497248553858899433281347776274390966255070668382409772465963176385751904286316639716489828285928978635855355970747105034388038350319447352538261087880109718552603329805296866567042793649019459534848470724032360639799964633748905196867853384109201940701530483598626465550495679048159865753998874913787925000267970891083136549937685688617570022717038125536572098179693557126646776084768401508922196353445609647520847478177415121380238111178597227153627832257799928795216823511402005832836435952524795942215581962882377976384250201837108076812047801647103999999999995081,
    ]
    a = [ai * 4919 for ai in a]
    
    PR.<x> = PolynomialRing(ZZ)
    f = sum([ai*x**(len(a)-i-1) for i, ai in enumerate(a)]) - 24196561
    
    DIV = 69684751861829721459380039
    
    ans = [0]
    for root, _ in reversed(f.roots()):
        if root % DIV != 0:
            continue
        ans.append(root // DIV - sum(ans))
    ans = ans[1:]
    
    print("".join(map(chr, ans)))

    justCTF{this_is_very_simple_flag_afer_so_big_polynomails}

    チームメイトがフラグを手に入れた問題

    [MISC] Sanity Check

    ただの sanity check だったわけではなく、動画を見て解かされたらしいです。

    [FORE, MISC] PDF is broken, and so is this file

    PDF を binwalk して、得られたファイルを見ると、 hex がテキストで書かれているところがあったらしく、それをバイナリに直したらフラグの画像が得られたらしいです。

    [MISC, WEB] Forgotten name

    https://transparencyreport.google.com/https/certificates で、 web 問のドメインを調べたら見つかったらしいです。 https://transparencyreport.google.com/https/certificates を使うというアイディアは最初からずっとあったのに、まさか web 問のドメインを見なきゃいけないとは…

    フラグが手に入りそうで入らなかった問題

    [MISC, STEGANO, PPC] Steganography 2.0

    https://arxiv.org/abs/1711.07201 の論文で実装された encoder の weight の data と、 10000 枚の画像が与えられ、 1 枚だけフラグ画像が埋め込まれているようです。自分に馴染みのある機械学習の問題だったので時間をかけましたが、解けず… (最終的に誰も正解していなかった)

    やったこととしては、与えられた画像を encoder に通して steg 画像を大量に生成し、 それらの画像から steg 画像を抽出する decoder を学習させました。 学習させた decoder を使うことで、例えば ↓ の 1 枚目の画像と 2 枚目の画像 (データセットの画像をグレースケール化した) を encoder に通して得られた 3 枚目の画像に対して、4 枚目のような画像を抜き出すことができるようになりました。

    あとはフラグが隠されている画像を探しだし、 decoder に対して文字を読み取ればよかったのですが、時間切れでした。どの画像がフラグ画像かわからず… 時間があれば、 encoder が出力した画像かデータセットのデータかを識別する discriminator を学習させ、それを使ってフラグ画像を探すことを考えていました。

    一応ソースコード。

    import subprocess
    
    import matplotlib.pyplot as plt
    import numpy as np
    import tensorflow as tf
    
    from CTFdata.encoder import Encoder, Decoder
    
    
    images_np = np.load("./CTFdata/images.nparray")
    images = tf.convert_to_tensor(images_np, dtype=tf.float32)
    gray_images = (
        0.2126 * images[:, :, :, 0:1]
        + 0.7152 * images[:, :, :, 1:2]
        + 0.0722 * images[:, :, :, 2:3]
    )
    gray_images = tf.random.shuffle(gray_images)
    
    encoder = Encoder().gen_encoder_model()
    
    # .index と .data だけしか情報が与えられていなかったため、一度適当にモデルを保存させた後に weight をコピーして、再読込
    encoder.save("./tmp", save_format="tf")
    cmd = "cp ./CTFdata/encoder.index ./tmp/variables/variables.index"
    subprocess.run(cmd.split())
    cmd = "cp ./CTFdata/encoder.data-00000-of-00001 ./tmp/variables/variables.data-00000-of-00001"
    subprocess.run(cmd.split())
    encoder = tf.keras.models.load_model("./tmp/")
    
    # encoder は train 済なので更新をさせない
    for layer in encoder.layers:
        layer.trainable = False
    
    # decoder はとりあえず論文と同じものを実装
    decoder = Decoder().gen_decoder_model()
    
    # encoder と decoder をつなげる
    cover = tf.keras.layers.Input(shape=(160, 160, 3), name="cover")
    hide = tf.keras.layers.Input(shape=(160, 160, 1), name="hide")
    hybrid = encoder.call([cover, hide])
    decrypt = decoder.call([hybrid])
    all_model = tf.keras.Model([cover, hide], [hybrid, decrypt], name="end-to-end")
    
    losses = {
        "encoded_image": "mse",
        "decrypt": "mse",
    }
    optimizer = tf.keras.optimizers.Adam(learning_rate=1e-4)
    all_model.compile(loss=losses, optimizer=optimizer, metrics=["mse"])
    
    # 埋め込む画像 (gray_images) を適宜ランダムに変更しながら学習
    for i in range(50):
        print(i)
        gray_images = tf.random.shuffle(gray_images)
        all_model.fit(
            x=[images, gray_images],
            y={"encoded_image": images, "decrypt": gray_images},
            epochs=1,
            validation_split=0.2,
            verbose=1,
        )
        all_model.save_weights(f"results2/param_{i}.hdf5")
      ;