| ofs | hex dump | ascii | 
|---|
| 0000 |  6f 61 75 74 68 32 2d 61 75 74 6f 2d 32 30 32 35    30 36 32 34 2e 31 39 31 39 2f 00 00 00 00 00 00  | oauth2-auto-20250624.1919/...... | 
| 0020 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0040 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0060 |  00 00 00 00 30 30 30 30 37 35 35 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000755.0000000.0000000.0000 | 
| 0080 |  30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 33 31 37 31 00 20 35 00 00 00  | 0000000.00000000000.013171..5... | 
| 00a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 00c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 00e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0100 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| 0120 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| 0140 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0160 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0180 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 01a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 01c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 01e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0200 |  6f 61 75 74 68 32 2d 61 75 74 6f 2d 32 30 32 35    30 36 32 34 2e 31 39 31 39 2f 6f 61 75 74 68 32  | oauth2-auto-20250624.1919/oauth2 | 
| 0220 |  2d 61 75 74 6f 2d 70 6b 67 2e 65 6c 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | -auto-pkg.el.................... | 
| 0240 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0260 |  00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000644.0000000.0000000.0000 | 
| 0280 |  30 30 30 31 30 31 36 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 36 34 34 30 00 20 30 00 00 00  | 0001016.00000000000.016440..0... | 
| 02a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 02c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 02e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0300 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| 0320 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| 0340 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0360 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0380 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 03a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 03c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 03e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0400 |  3b 3b 20 2d 2a 2d 20 6e 6f 2d 62 79 74 65 2d 63    6f 6d 70 69 6c 65 3a 20 74 3b 20 6c 65 78 69 63  | ;;.-*-.no-byte-compile:.t;.lexic | 
| 0420 |  61 6c 2d 62 69 6e 64 69 6e 67 3a 20 6e 69 6c 20    2d 2a 2d 0a 28 64 65 66 69 6e 65 2d 70 61 63 6b  | al-binding:.nil.-*-.(define-pack | 
| 0440 |  61 67 65 20 22 6f 61 75 74 68 32 2d 61 75 74 6f    22 20 22 32 30 32 35 30 36 32 34 2e 31 39 31 39  | age."oauth2-auto"."20250624.1919 | 
| 0460 |  22 0a 20 20 22 41 75 74 6f 6d 61 74 69 63 61 6c    6c 79 20 72 65 66 72 65 73 68 69 6e 67 20 4f 41  | "..."Automatically.refreshing.OA | 
| 0480 |  75 74 68 20 32 2e 30 20 74 6f 6b 65 6e 73 2e 22    0a 20 20 27 28 28 65 6d 61 63 73 20 22 32 36 2e  | uth.2.0.tokens."...'((emacs."26. | 
| 04a0 |  31 22 29 0a 20 20 20 20 28 61 69 6f 20 20 20 22    31 2e 30 22 29 0a 20 20 20 20 28 61 6c 65 72 74  | 1").....(aio..."1.0").....(alert | 
| 04c0 |  20 22 31 2e 32 22 29 0a 20 20 20 20 28 64 61 73    68 20 20 22 32 2e 31 39 22 29 29 0a 20 20 3a 75  | ."1.2").....(dash.."2.19"))...:u | 
| 04e0 |  72 6c 20 22 68 74 74 70 73 3a 2f 2f 67 69 74 68    75 62 2e 63 6f 6d 2f 72 68 61 70 73 30 64 79 2f  | rl."https://github.com/rhaps0dy/ | 
| 0500 |  65 6d 61 63 73 2d 6f 61 75 74 68 32 2d 61 75 74    6f 22 0a 20 20 3a 63 6f 6d 6d 69 74 20 22 32 30  | emacs-oauth2-auto"...:commit."20 | 
| 0520 |  62 33 31 35 33 64 39 63 66 62 37 61 61 66 65 36    38 61 30 31 36 38 36 34 37 61 31 37 33 37 33 61  | b3153d9cfb7aafe68a0168647a17373a | 
| 0540 |  64 66 35 65 32 32 22 0a 20 20 3a 72 65 76 64 65    73 63 20 22 32 30 62 33 31 35 33 64 39 63 66 62  | df5e22"...:revdesc."20b3153d9cfb | 
| 0560 |  22 0a 20 20 3a 6b 65 79 77 6f 72 64 73 20 27 28    22 63 6f 6d 6d 22 20 22 6f 61 75 74 68 32 22 29  | "...:keywords.'("comm"."oauth2") | 
| 0580 |  0a 20 20 3a 61 75 74 68 6f 72 73 20 27 28 28 22    41 64 72 69 c3 a0 20 47 61 72 72 69 67 61 2d 41  | ...:authors.'(("Adri...Garriga-A | 
| 05a0 |  6c 6f 6e 73 6f 22 20 2e 20 22 61 64 72 69 61 2e    67 61 72 72 69 67 61 40 67 6d 61 69 6c 2e 63 6f  | lonso"..."adria.garriga@gmail.co | 
| 05c0 |  6d 22 29 29 0a 20 20 3a 6d 61 69 6e 74 61 69 6e    65 72 73 20 27 28 28 22 41 64 72 69 c3 a0 20 47  | m"))...:maintainers.'(("Adri...G | 
| 05e0 |  61 72 72 69 67 61 2d 41 6c 6f 6e 73 6f 22 20 2e    20 22 61 64 72 69 61 2e 67 61 72 72 69 67 61 40  | arriga-Alonso"..."adria.garriga@ | 
| 0600 |  67 6d 61 69 6c 2e 63 6f 6d 22 29 29 29 0a 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | gmail.com")))................... | 
| 0620 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0640 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0660 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0680 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 06a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 06c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 06e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0700 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0720 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0740 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0760 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0780 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 07a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 07c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 07e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0800 |  6f 61 75 74 68 32 2d 61 75 74 6f 2d 32 30 32 35    30 36 32 34 2e 31 39 31 39 2f 6f 61 75 74 68 32  | oauth2-auto-20250624.1919/oauth2 | 
| 0820 |  2d 61 75 74 6f 2e 65 6c 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | -auto.el........................ | 
| 0840 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0860 |  00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30  | ....0000644.0000000.0000000.0000 | 
| 0880 |  30 30 36 31 36 34 34 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 35 36 37 36 00 20 30 00 00 00  | 0061644.00000000000.015676..0... | 
| 08a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 08c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 08e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0900 |  00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .ustar...root................... | 
| 0920 |  00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | .........root................... | 
| 0940 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0960 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0980 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 09a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 09c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 09e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 0a00 |  3b 3b 3b 20 6f 61 75 74 68 32 2d 61 75 74 6f 2e    65 6c 20 2d 2d 2d 20 41 75 74 6f 6d 61 74 69 63  | ;;;.oauth2-auto.el.---.Automatic | 
| 0a20 |  61 6c 6c 79 20 72 65 66 72 65 73 68 69 6e 67 20    4f 41 75 74 68 20 32 2e 30 20 74 6f 6b 65 6e 73  | ally.refreshing.OAuth.2.0.tokens | 
| 0a40 |  20 2d 2a 2d 20 6c 65 78 69 63 61 6c 2d 62 69 6e    64 69 6e 67 3a 20 74 3b 20 2d 2a 2d 0a 0a 3b 3b  | .-*-.lexical-binding:.t;.-*-..;; | 
| 0a60 |  20 43 6f 70 79 72 69 67 68 74 20 28 43 29 20 32    30 32 32 2d 32 30 32 33 20 41 64 72 69 c3 a0 20  | .Copyright.(C).2022-2023.Adri... | 
| 0a80 |  47 61 72 72 69 67 61 2d 41 6c 6f 6e 73 6f 2c 20    52 6f 62 65 72 74 20 49 72 65 6c 61 6e 0a 0a 3b  | Garriga-Alonso,.Robert.Irelan..; | 
| 0aa0 |  3b 20 41 75 74 68 6f 72 3a 20 41 64 72 69 c3 a0    20 47 61 72 72 69 67 61 2d 41 6c 6f 6e 73 6f 20  | ;.Author:.Adri...Garriga-Alonso. | 
| 0ac0 |  3c 61 64 72 69 61 2e 67 61 72 72 69 67 61 40 67    6d 61 69 6c 2e 63 6f 6d 3e 0a 3b 3b 20 55 52 4c  | <adria.garriga@gmail.com>.;;.URL | 
| 0ae0 |  3a 20 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62    2e 63 6f 6d 2f 72 68 61 70 73 30 64 79 2f 65 6d  | :.https://github.com/rhaps0dy/em | 
| 0b00 |  61 63 73 2d 6f 61 75 74 68 32 2d 61 75 74 6f 0a    3b 3b 20 50 61 63 6b 61 67 65 2d 56 65 72 73 69  | acs-oauth2-auto.;;.Package-Versi | 
| 0b20 |  6f 6e 3a 20 32 30 32 35 30 36 32 34 2e 31 39 31    39 0a 3b 3b 20 50 61 63 6b 61 67 65 2d 52 65 76  | on:.20250624.1919.;;.Package-Rev | 
| 0b40 |  69 73 69 6f 6e 3a 20 32 30 62 33 31 35 33 64 39    63 66 62 0a 3b 3b 20 4b 65 79 77 6f 72 64 73 3a  | ision:.20b3153d9cfb.;;.Keywords: | 
| 0b60 |  20 63 6f 6d 6d 20 6f 61 75 74 68 32 0a 3b 3b 20    50 61 63 6b 61 67 65 2d 52 65 71 75 69 72 65 73  | .comm.oauth2.;;.Package-Requires | 
| 0b80 |  3a 20 28 28 65 6d 61 63 73 20 22 32 36 2e 31 22    29 20 28 61 69 6f 20 22 31 2e 30 22 29 20 28 61  | :.((emacs."26.1").(aio."1.0").(a | 
| 0ba0 |  6c 65 72 74 20 22 31 2e 32 22 29 20 28 64 61 73    68 20 22 32 2e 31 39 22 29 29 0a 0a 3b 3b 20 54  | lert."1.2").(dash."2.19"))..;;.T | 
| 0bc0 |  68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66    72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f  | his.program.is.free.software;.yo | 
| 0be0 |  75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75    74 65 20 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64  | u.can.redistribute.it.and/or.mod | 
| 0c00 |  69 66 79 0a 3b 3b 20 69 74 20 75 6e 64 65 72 20    74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  | ify.;;.it.under.the.terms.of.the | 
| 0c20 |  20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62    6c 69 63 20 4c 69 63 65 6e 73 65 20 61 73 20 70  | .GNU.General.Public.License.as.p | 
| 0c40 |  75 62 6c 69 73 68 65 64 20 62 79 0a 3b 3b 20 74    68 65 20 46 72 65 65 20 53 6f 66 74 77 61 72 65  | ublished.by.;;.the.Free.Software | 
| 0c60 |  20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 65 69 74    68 65 72 20 76 65 72 73 69 6f 6e 20 33 20 6f 66  | .Foundation,.either.version.3.of | 
| 0c80 |  20 74 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f 72    0a 3b 3b 20 28 61 74 20 79 6f 75 72 20 6f 70 74  | .the.License,.or.;;.(at.your.opt | 
| 0ca0 |  69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76    65 72 73 69 6f 6e 2e 0a 0a 3b 3b 20 54 68 69 73  | ion).any.later.version...;;.This | 
| 0cc0 |  20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74    72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68  | .program.is.distributed.in.the.h | 
| 0ce0 |  6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c    20 62 65 20 75 73 65 66 75 6c 2c 0a 3b 3b 20 62  | ope.that.it.will.be.useful,.;;.b | 
| 0d00 |  75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57    41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74  | ut.WITHOUT.ANY.WARRANTY;.without | 
| 0d20 |  20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65    64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 3b 3b  | .even.the.implied.warranty.of.;; | 
| 0d40 |  20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59    20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20  | .MERCHANTABILITY.or.FITNESS.FOR. | 
| 0d60 |  41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52    50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 0a 3b  | A.PARTICULAR.PURPOSE...See.the.; | 
| 0d80 |  3b 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75    62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f 72  | ;.GNU.General.Public.License.for | 
| 0da0 |  20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a 0a    3b 3b 20 59 6f 75 20 73 68 6f 75 6c 64 20 68 61  | .more.details...;;.You.should.ha | 
| 0dc0 |  76 65 20 72 65 63 65 69 76 65 64 20 61 20 63 6f    70 79 20 6f 66 20 74 68 65 20 47 4e 55 20 47 65  | ve.received.a.copy.of.the.GNU.Ge | 
| 0de0 |  6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63    65 6e 73 65 0a 3b 3b 20 61 6c 6f 6e 67 20 77 69  | neral.Public.License.;;.along.wi | 
| 0e00 |  74 68 20 74 68 69 73 20 70 72 6f 67 72 61 6d 2e    20 20 49 66 20 6e 6f 74 2c 20 73 65 65 20 3c 68  | th.this.program...If.not,.see.<h | 
| 0e20 |  74 74 70 3a 2f 2f 77 77 77 2e 67 6e 75 2e 6f 72    67 2f 6c 69 63 65 6e 73 65 73 2f 3e 2e 0a 0a 3b  | ttp://www.gnu.org/licenses/>...; | 
| 0e40 |  3b 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a 0a 0a    3b 3b 20 53 74 61 74 65 20 6d 61 63 68 69 6e 65  | ;;.Commentary:..;;.State.machine | 
| 0e60 |  20 74 6f 20 66 65 74 63 68 20 4f 41 75 74 68 20    32 2e 30 20 74 6f 6b 65 6e 73 20 66 6f 72 20 76  | .to.fetch.OAuth.2.0.tokens.for.v | 
| 0e80 |  61 72 69 6f 75 73 20 65 6d 61 69 6c 20 61 63 63    6f 75 6e 74 73 2e 0a 3b 3b 0a 3b 3b 20 42 61 73  | arious.email.accounts..;;.;;.Bas | 
| 0ea0 |  65 64 20 6f 6e 20 7e 6d 75 74 74 5f 6f 61 75 74    68 32 2e 70 79 7e 2c 20 77 68 69 63 68 20 69 73  | ed.on.~mutt_oauth2.py~,.which.is | 
| 0ec0 |  20 43 6f 70 79 72 69 67 68 74 20 28 43 29 20 32    30 32 30 20 41 6c 65 78 61 6e 64 65 72 20 50 65  | .Copyright.(C).2020.Alexander.Pe | 
| 0ee0 |  72 6c 69 73 2c 0a 3b 3b 20 6c 69 63 65 6e 73 65    64 20 75 6e 64 65 72 20 74 68 65 20 47 50 4c 76  | rlis,.;;.licensed.under.the.GPLv | 
| 0f00 |  33 20 6f 72 20 6c 61 74 65 72 2e 0a 3b 3b 0a 3b    3b 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e  | 3.or.later..;;.;;.The.entry.poin | 
| 0f20 |  74 73 20 61 72 65 20 60 6f 61 75 74 68 32 2d 61    75 74 6f 2d 70 6c 69 73 74 27 20 61 6e 64 20 74  | ts.are.`oauth2-auto-plist'.and.t | 
| 0f40 |  68 65 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 66    75 6e 63 74 69 6f 6e 0a 3b 3b 20 60 6f 61 75 74  | he.convenience.function.;;.`oaut | 
| 0f60 |  68 32 2d 61 75 74 6f 2d 61 63 63 65 73 73 2d 74    6f 6b 65 6e 27 2e 0a 0a 3b 3b 3b 20 43 6f 64 65  | h2-auto-access-token'...;;;.Code | 
| 0f80 |  3a 0a 28 72 65 71 75 69 72 65 20 27 70 6c 73 74    6f 72 65 29 0a 28 72 65 71 75 69 72 65 20 27 61  | :.(require.'plstore).(require.'a | 
| 0fa0 |  69 6f 29 20 20 20 20 20 3b 20 70 72 6f 6d 69 73    65 73 0a 28 65 76 61 6c 2d 77 68 65 6e 2d 63 6f  | io).....;.promises.(eval-when-co | 
| 0fc0 |  6d 70 69 6c 65 20 28 72 65 71 75 69 72 65 20 27    64 61 73 68 29 29 20 20 20 20 3b 20 60 2d 2d 6d  | mpile.(require.'dash))....;.`--m | 
| 0fe0 |  61 70 27 0a 28 72 65 71 75 69 72 65 20 27 61 6c    65 72 74 29 20 20 20 3b 20 60 61 6c 65 72 74 27  | ap'.(require.'alert)...;.`alert' | 
| 1000 |  20 74 6f 20 67 69 76 65 20 74 68 65 20 75 73 65    72 20 61 20 68 65 61 64 73 20 75 70 20 74 6f 20  | .to.give.the.user.a.heads.up.to. | 
| 1020 |  67 6f 20 74 6f 20 74 68 65 69 72 20 62 72 6f 77    73 65 72 20 61 6e 64 20 6c 6f 67 20 69 6e 0a 28  | go.to.their.browser.and.log.in.( | 
| 1040 |  72 65 71 75 69 72 65 20 27 75 72 6c 2d 61 75 74    68 29 0a 0a 28 64 65 66 67 72 6f 75 70 20 6f 61  | require.'url-auth)..(defgroup.oa | 
| 1060 |  75 74 68 32 2d 61 75 74 6f 20 6e 69 6c 0a 20 20    22 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72  | uth2-auto.nil..."Automatically.r | 
| 1080 |  65 66 72 65 73 68 69 6e 67 20 4f 41 75 74 68 20    32 2e 30 20 74 6f 6b 65 6e 73 2e 22 0a 20 20 3a  | efreshing.OAuth.2.0.tokens."...: | 
| 10a0 |  67 72 6f 75 70 20 27 63 6f 6d 6d 29 0a 0a 0a 3b    3b 20 45 6e 64 70 6f 69 6e 74 73 20 61 6e 64 20  | group.'comm)...;;.Endpoints.and. | 
| 10c0 |  63 6c 69 65 6e 74 20 73 65 63 72 65 74 2f 69 64    20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75  | client.secret/id.used.for.variou | 
| 10e0 |  73 20 4f 41 75 74 68 32 20 70 72 6f 76 69 64 65    72 73 2e 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20  | s.OAuth2.providers...(defcustom. | 
| 1100 |  6f 61 75 74 68 32 2d 61 75 74 6f 2d 6d 69 63 72    6f 73 6f 66 74 2d 64 65 66 61 75 6c 74 2d 74 65  | oauth2-auto-microsoft-default-te | 
| 1120 |  6e 61 6e 74 20 22 63 6f 6d 6d 6f 6e 22 0a 20 20    22 44 65 66 61 75 6c 74 20 74 65 6e 61 6e 74 20  | nant."common"..."Default.tenant. | 
| 1140 |  49 44 20 66 6f 72 20 4d 69 63 72 6f 73 6f 66 74    20 4f 41 75 74 68 32 2e 22 0a 20 20 3a 67 72 6f  | ID.for.Microsoft.OAuth2."...:gro | 
| 1160 |  75 70 20 27 6f 61 75 74 68 32 2d 61 75 74 6f 0a    20 20 3a 74 79 70 65 20 27 73 74 72 69 6e 67 29  | up.'oauth2-auto...:type.'string) | 
| 1180 |  0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 6f 61 75    74 68 32 2d 61 75 74 6f 2d 6d 69 63 72 6f 73 6f  | ..(defcustom.oauth2-auto-microso | 
| 11a0 |  66 74 2d 63 6c 69 65 6e 74 2d 69 64 20 22 22 0a    20 20 22 44 65 66 61 75 6c 74 20 63 6c 69 65 6e  | ft-client-id.""..."Default.clien | 
| 11c0 |  74 20 49 44 20 66 6f 72 20 4d 69 63 72 6f 73 6f    66 74 20 4f 41 75 74 68 32 2e 22 0a 20 20 3a 67  | t.ID.for.Microsoft.OAuth2."...:g | 
| 11e0 |  72 6f 75 70 20 27 6f 61 75 74 68 32 2d 61 75 74    6f 0a 20 20 3a 74 79 70 65 20 27 73 74 72 69 6e  | roup.'oauth2-auto...:type.'strin | 
| 1200 |  67 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 6f    61 75 74 68 32 2d 61 75 74 6f 2d 6d 69 63 72 6f  | g)..(defcustom.oauth2-auto-micro | 
| 1220 |  73 6f 66 74 2d 63 6c 69 65 6e 74 2d 73 65 63 72    65 74 20 22 22 0a 20 20 22 44 65 66 61 75 6c 74  | soft-client-secret.""..."Default | 
| 1240 |  20 63 6c 69 65 6e 74 20 73 65 63 72 65 74 20 66    6f 72 20 4d 69 63 72 6f 73 6f 66 74 20 4f 41 75  | .client.secret.for.Microsoft.OAu | 
| 1260 |  74 68 32 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27    6f 61 75 74 68 32 2d 61 75 74 6f 0a 20 20 3a 74  | th2."...:group.'oauth2-auto...:t | 
| 1280 |  79 70 65 20 27 73 74 72 69 6e 67 29 0a 0a 28 64    65 66 63 75 73 74 6f 6d 20 6f 61 75 74 68 32 2d  | ype.'string)..(defcustom.oauth2- | 
| 12a0 |  61 75 74 6f 2d 67 6f 6f 67 6c 65 2d 63 6c 69 65    6e 74 2d 69 64 20 22 22 0a 20 20 22 44 65 66 61  | auto-google-client-id.""..."Defa | 
| 12c0 |  75 6c 74 20 63 6c 69 65 6e 74 20 49 44 20 66 6f    72 20 47 6f 6f 67 6c 65 20 4f 41 75 74 68 32 2e  | ult.client.ID.for.Google.OAuth2. | 
| 12e0 |  22 0a 20 20 3a 67 72 6f 75 70 20 27 6f 61 75 74    68 32 2d 61 75 74 6f 0a 20 20 3a 74 79 70 65 20  | "...:group.'oauth2-auto...:type. | 
| 1300 |  27 73 74 72 69 6e 67 29 0a 0a 28 64 65 66 63 75    73 74 6f 6d 20 6f 61 75 74 68 32 2d 61 75 74 6f  | 'string)..(defcustom.oauth2-auto | 
| 1320 |  2d 67 6f 6f 67 6c 65 2d 63 6c 69 65 6e 74 2d 73    65 63 72 65 74 20 22 22 0a 20 20 22 44 65 66 61  | -google-client-secret.""..."Defa | 
| 1340 |  75 6c 74 20 63 6c 69 65 6e 74 20 73 65 63 72 65    74 20 66 6f 72 20 47 6f 6f 67 6c 65 20 4f 41 75  | ult.client.secret.for.Google.OAu | 
| 1360 |  74 68 32 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27    6f 61 75 74 68 32 2d 61 75 74 6f 0a 20 20 3a 74  | th2."...:group.'oauth2-auto...:t | 
| 1380 |  79 70 65 20 27 73 74 72 69 6e 67 29 0a 0a 28 64    65 66 63 75 73 74 6f 6d 20 6f 61 75 74 68 32 2d  | ype.'string)..(defcustom.oauth2- | 
| 13a0 |  61 75 74 6f 2d 61 64 64 69 74 69 6f 6e 61 6c 2d    70 72 6f 76 69 64 65 72 73 2d 61 6c 69 73 74 20  | auto-additional-providers-alist. | 
| 13c0 |  27 28 29 0a 20 20 22 41 64 64 69 74 69 6f 6e 61    6c 20 4f 41 75 74 68 32 20 70 72 6f 76 69 64 65  | '()..."Additional.OAuth2.provide | 
| 13e0 |  72 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 60 6f 61    75 74 68 32 2d 61 75 74 6f 2d 2d 64 65 66 61 75  | rs.following.`oauth2-auto--defau | 
| 1400 |  6c 74 2d 70 72 6f 76 69 64 65 72 73 27 2e 22 0a    20 20 3a 67 72 6f 75 70 20 27 6f 61 75 74 68 32  | lt-providers'."...:group.'oauth2 | 
| 1420 |  2d 61 75 74 6f 0a 20 20 3a 74 79 70 65 20 27 61    6c 69 73 74 29 0a 0a 28 64 65 66 63 75 73 74 6f  | -auto...:type.'alist)..(defcusto | 
| 1440 |  6d 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 6d 61    6e 75 61 6c 6c 79 2d 61 75 74 68 20 6e 69 6c 0a  | m.oauth2-auto-manually-auth.nil. | 
| 1460 |  20 20 22 49 66 20 6e 6f 6e 2d 6e 69 6c 2c 20 6e    6f 74 20 6c 61 75 6e 63 68 20 62 72 6f 77 73 65  | .."If.non-nil,.not.launch.browse | 
| 1480 |  72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e    22 0a 20 20 3a 67 72 6f 75 70 20 27 6f 61 75 74  | r.automatically."...:group.'oaut | 
| 14a0 |  68 32 2d 61 75 74 6f 0a 20 20 3a 74 79 70 65 20    27 62 6f 6f 6c 65 61 6e 29 0a 0a 28 64 65 66 75  | h2-auto...:type.'boolean)..(defu | 
| 14c0 |  6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 64    65 66 61 75 6c 74 2d 70 72 6f 76 69 64 65 72 73  | n.oauth2-auto--default-providers | 
| 14e0 |  20 28 29 0a 20 20 22 44 65 66 61 75 6c 74 20 4f    41 75 74 68 32 20 70 72 6f 76 69 64 65 72 73 2e  | .()..."Default.OAuth2.providers. | 
| 1500 |  22 0a 20 20 28 6c 65 74 20 28 28 6d 73 2d 6f 61    75 74 68 32 2d 75 72 6c 20 28 63 6f 6e 63 61 74  | "...(let.((ms-oauth2-url.(concat | 
| 1520 |  20 22 68 74 74 70 73 3a 2f 2f 6c 6f 67 69 6e 2e    6d 69 63 72 6f 73 6f 66 74 6f 6e 6c 69 6e 65 2e  | ."https://login.microsoftonline. | 
| 1540 |  63 6f 6d 2f 22 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | com/"........................... | 
| 1560 |  20 20 20 20 20 6f 61 75 74 68 32 2d 61 75 74 6f    2d 6d 69 63 72 6f 73 6f 66 74 2d 64 65 66 61 75  | .....oauth2-auto-microsoft-defau | 
| 1580 |  6c 74 2d 74 65 6e 61 6e 74 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | lt-tenant....................... | 
| 15a0 |  20 20 20 20 20 20 20 20 20 22 2f 6f 61 75 74 68    32 2f 76 32 2e 30 2f 22 29 29 29 0a 20 20 20 20  | ........."/oauth2/v2.0/")))..... | 
| 15c0 |  60 28 28 67 6f 6f 67 6c 65 0a 20 20 20 20 20 20    20 28 61 75 74 68 6f 72 69 7a 65 5f 75 72 6c 20  | `((google........(authorize_url. | 
| 15e0 |  2e 20 22 68 74 74 70 73 3a 2f 2f 61 63 63 6f 75    6e 74 73 2e 67 6f 6f 67 6c 65 2e 63 6f 6d 2f 6f  | .."https://accounts.google.com/o | 
| 1600 |  2f 6f 61 75 74 68 32 2f 61 75 74 68 22 29 0a 20    20 20 20 20 20 20 28 74 6f 6b 65 6e 5f 75 72 6c  | /oauth2/auth")........(token_url | 
| 1620 |  20 2e 20 22 68 74 74 70 73 3a 2f 2f 6f 61 75 74    68 32 2e 67 6f 6f 67 6c 65 61 70 69 73 2e 63 6f  | ..."https://oauth2.googleapis.co | 
| 1640 |  6d 2f 74 6f 6b 65 6e 22 29 0a 20 20 20 20 20 20    20 28 73 63 6f 70 65 20 2e 20 22 68 74 74 70 73  | m/token")........(scope..."https | 
| 1660 |  3a 2f 2f 6d 61 69 6c 2e 67 6f 6f 67 6c 65 2e 63    6f 6d 2f 20 68 74 74 70 73 3a 2f 2f 77 77 77 2e  | ://mail.google.com/.https://www. | 
| 1680 |  67 6f 6f 67 6c 65 61 70 69 73 2e 63 6f 6d 2f 61    75 74 68 2f 63 61 6c 65 6e 64 61 72 2e 65 76 65  | googleapis.com/auth/calendar.eve | 
| 16a0 |  6e 74 73 22 29 0a 20 20 20 20 20 20 20 28 63 6c    69 65 6e 74 5f 69 64 20 2e 20 2c 6f 61 75 74 68  | nts")........(client_id...,oauth | 
| 16c0 |  32 2d 61 75 74 6f 2d 67 6f 6f 67 6c 65 2d 63 6c    69 65 6e 74 2d 69 64 29 0a 20 20 20 20 20 20 20  | 2-auto-google-client-id)........ | 
| 16e0 |  28 63 6c 69 65 6e 74 5f 73 65 63 72 65 74 20 2e    20 2c 6f 61 75 74 68 32 2d 61 75 74 6f 2d 67 6f  | (client_secret...,oauth2-auto-go | 
| 1700 |  6f 67 6c 65 2d 63 6c 69 65 6e 74 2d 73 65 63 72    65 74 29 29 0a 20 20 20 20 20 20 28 6d 69 63 72  | ogle-client-secret)).......(micr | 
| 1720 |  6f 73 6f 66 74 0a 20 20 20 20 20 20 20 28 61 75    74 68 6f 72 69 7a 65 5f 75 72 6c 20 2e 20 2c 28  | osoft........(authorize_url...,( | 
| 1740 |  63 6f 6e 63 61 74 20 6d 73 2d 6f 61 75 74 68 32    2d 75 72 6c 20 22 61 75 74 68 6f 72 69 7a 65 22  | concat.ms-oauth2-url."authorize" | 
| 1760 |  29 29 0a 20 20 20 20 20 20 20 28 74 6f 6b 65 6e    5f 75 72 6c 20 2e 20 2c 28 63 6f 6e 63 61 74 20  | ))........(token_url...,(concat. | 
| 1780 |  6d 73 2d 6f 61 75 74 68 32 2d 75 72 6c 20 22 74    6f 6b 65 6e 22 29 29 0a 20 20 20 20 20 20 20 28  | ms-oauth2-url."token"))........( | 
| 17a0 |  74 65 6e 61 6e 74 20 2e 20 2c 6f 61 75 74 68 32    2d 61 75 74 6f 2d 6d 69 63 72 6f 73 6f 66 74 2d  | tenant...,oauth2-auto-microsoft- | 
| 17c0 |  64 65 66 61 75 6c 74 2d 74 65 6e 61 6e 74 29 0a    20 20 20 20 20 20 20 28 73 63 6f 70 65 20 2e 20  | default-tenant)........(scope... | 
| 17e0 |  22 6f 66 66 6c 69 6e 65 5f 61 63 63 65 73 73 20    68 74 74 70 73 3a 2f 2f 6f 75 74 6c 6f 6f 6b 2e  | "offline_access.https://outlook. | 
| 1800 |  6f 66 66 69 63 65 2e 63 6f 6d 2f 49 4d 41 50 2e    41 63 63 65 73 73 41 73 55 73 65 72 2e 41 6c 6c  | office.com/IMAP.AccessAsUser.All | 
| 1820 |  20 68 74 74 70 73 3a 2f 2f 6f 75 74 6c 6f 6f 6b    2e 6f 66 66 69 63 65 2e 63 6f 6d 2f 50 4f 50 2e  | .https://outlook.office.com/POP. | 
| 1840 |  41 63 63 65 73 73 41 73 55 73 65 72 2e 41 6c 6c    20 68 74 74 70 73 3a 2f 2f 6f 75 74 6c 6f 6f 6b  | AccessAsUser.All.https://outlook | 
| 1860 |  2e 6f 66 66 69 63 65 2e 63 6f 6d 2f 53 4d 54 50    2e 53 65 6e 64 22 29 0a 20 20 20 20 20 20 20 28  | .office.com/SMTP.Send")........( | 
| 1880 |  63 6c 69 65 6e 74 5f 69 64 20 2e 20 2c 6f 61 75    74 68 32 2d 61 75 74 6f 2d 6d 69 63 72 6f 73 6f  | client_id...,oauth2-auto-microso | 
| 18a0 |  66 74 2d 63 6c 69 65 6e 74 2d 69 64 29 0a 20 20    20 20 20 20 20 28 63 6c 69 65 6e 74 5f 73 65 63  | ft-client-id)........(client_sec | 
| 18c0 |  72 65 74 20 2e 20 2c 6f 61 75 74 68 32 2d 61 75    74 6f 2d 6d 69 63 72 6f 73 6f 66 74 2d 63 6c 69  | ret...,oauth2-auto-microsoft-cli | 
| 18e0 |  65 6e 74 2d 73 65 63 72 65 74 29 29 29 29 29 0a    0a 0a 28 64 65 66 75 6e 20 6f 61 75 74 68 32 2d  | ent-secret)))))...(defun.oauth2- | 
| 1900 |  61 75 74 6f 2d 70 72 6f 76 69 64 65 72 73 2d 61    6c 69 73 74 20 28 29 0a 20 20 22 52 65 74 75 72  | auto-providers-alist.()..."Retur | 
| 1920 |  6e 20 61 6c 6c 20 61 76 61 69 6c 61 62 6c 65 20    4f 41 75 74 68 32 20 70 72 6f 76 69 64 65 72 73  | n.all.available.OAuth2.providers | 
| 1940 |  2e 0a 54 68 69 73 20 63 6f 6d 62 69 6e 65 73 20    74 68 65 20 70 72 6f 76 69 64 65 72 73 20 73 70  | ..This.combines.the.providers.sp | 
| 1960 |  65 63 69 66 69 65 64 20 69 6e 20 60 6f 61 75 74    68 32 2d 61 75 74 6f 2d 2d 64 65 66 61 75 6c 74  | ecified.in.`oauth2-auto--default | 
| 1980 |  2d 70 72 6f 76 69 64 65 72 73 27 20 61 6e 64 0a    60 6f 61 75 74 68 32 2d 61 75 74 6f 2d 61 64 64  | -providers'.and.`oauth2-auto-add | 
| 19a0 |  69 74 69 6f 6e 61 6c 2d 70 72 6f 76 69 64 65 72    73 2d 61 6c 69 73 74 27 2e 22 0a 20 20 28 61 70  | itional-providers-alist'."...(ap | 
| 19c0 |  70 65 6e 64 20 6f 61 75 74 68 32 2d 61 75 74 6f    2d 61 64 64 69 74 69 6f 6e 61 6c 2d 70 72 6f 76  | pend.oauth2-auto-additional-prov | 
| 19e0 |  69 64 65 72 73 2d 61 6c 69 73 74 0a 20 20 20 20    20 20 20 20 20 20 28 6f 61 75 74 68 32 2d 61 75  | iders-alist...........(oauth2-au | 
| 1a00 |  74 6f 2d 2d 64 65 66 61 75 6c 74 2d 70 72 6f 76    69 64 65 72 73 29 29 29 0a 0a 0a 3b 3b 20 4d 61  | to--default-providers)))...;;.Ma | 
| 1a20 |  69 6e 20 64 61 74 61 20 73 74 72 75 63 74 75 72    65 0a 0a 28 64 65 66 75 6e 20 6f 61 75 74 68 32  | in.data.structure..(defun.oauth2 | 
| 1a40 |  2d 61 75 74 6f 2d 2d 6d 61 6b 65 2d 70 6c 69 73    74 20 28 72 65 73 70 6f 6e 73 65 20 70 6c 69 73  | -auto--make-plist.(response.plis | 
| 1a60 |  74 29 0a 20 20 22 4d 61 6b 65 20 74 68 65 20 6d    61 69 6e 20 64 61 74 61 20 73 74 72 75 63 74 75  | t)..."Make.the.main.data.structu | 
| 1a80 |  72 65 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65    2e 0a 0a 54 68 69 73 20 64 61 74 61 20 73 74 72  | re.of.the.module...This.data.str | 
| 1aa0 |  75 63 74 75 72 65 20 69 73 20 61 20 70 6c 69 73    74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6e 20  | ucture.is.a.plist.containing.an. | 
| 1ac0 |  3a 61 63 63 65 73 73 2d 74 6f 6b 65 6e 2c 20 3a    72 65 66 72 65 73 68 2d 74 6f 6b 65 6e 2c 20 61  | :access-token,.:refresh-token,.a | 
| 1ae0 |  6e 64 0a 3a 65 78 70 69 72 61 74 69 6f 6e 2e 20    20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74  | nd.:expiration...This.function.t | 
| 1b00 |  61 6b 65 73 20 52 45 53 50 4f 4e 53 45 20 66 72    6f 6d 20 e2 80 98 6f 61 75 74 68 32 2d 61 75 74  | akes.RESPONSE.from....oauth2-aut | 
| 1b20 |  6f 2d 2d 72 65 71 75 65 73 74 e2 80 99 2c 20 61    6e 64 20 64 61 74 61 0a 66 72 6f 6d 20 50 4c 49  | o--request...,.and.data.from.PLI | 
| 1b40 |  53 54 20 69 66 20 6e 6f 6e 2d 6e 69 6c 2e 20 20    54 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  | ST.if.non-nil...The.return.value | 
| 1b60 |  20 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f 20    62 65 20 73 74 6f 72 65 64 20 69 6e 20 70 6c 73  | .is.intended.to.be.stored.in.pls | 
| 1b80 |  74 6f 72 65 2e 22 0a 20 20 28 6c 65 74 20 28 28    72 65 66 72 65 73 68 2d 74 6f 6b 65 6e 20 28 6f  | tore."...(let.((refresh-token.(o | 
| 1ba0 |  72 20 28 63 64 72 20 28 61 73 73 6f 63 20 27 72    65 66 72 65 73 68 5f 74 6f 6b 65 6e 20 72 65 73  | r.(cdr.(assoc.'refresh_token.res | 
| 1bc0 |  70 6f 6e 73 65 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ponse))......................... | 
| 1be0 |  20 20 20 28 70 6c 69 73 74 2d 67 65 74 20 70 6c    69 73 74 20 3a 72 65 66 72 65 73 68 2d 74 6f 6b  | ...(plist-get.plist.:refresh-tok | 
| 1c00 |  65 6e 29 29 29 29 0a 20 20 20 20 28 75 6e 6c 65    73 73 20 72 65 66 72 65 73 68 2d 74 6f 6b 65 6e  | en)))).....(unless.refresh-token | 
| 1c20 |  0a 20 20 20 20 20 20 28 65 72 72 6f 72 20 22 4e    6f 20 72 65 66 72 65 73 68 20 74 6f 6b 65 6e 20  | .......(error."No.refresh.token. | 
| 1c40 |  69 6e 20 72 65 73 70 6f 6e 73 65 20 25 73 20 6f    72 20 70 6c 69 73 74 20 25 73 22 0a 20 20 20 20  | in.response.%s.or.plist.%s"..... | 
| 1c60 |  20 20 20 20 20 20 20 20 20 28 70 70 2d 74 6f 2d    73 74 72 69 6e 67 20 72 65 73 70 6f 6e 73 65 29  | .........(pp-to-string.response) | 
| 1c80 |  20 28 70 70 2d 74 6f 2d 73 74 72 69 6e 67 20 70    6c 69 73 74 29 29 29 0a 20 20 20 20 60 28 3a 61  | .(pp-to-string.plist))).....`(:a | 
| 1ca0 |  63 63 65 73 73 2d 74 6f 6b 65 6e 20 2c 28 63 64    72 20 28 61 73 73 6f 63 20 27 61 63 63 65 73 73  | ccess-token.,(cdr.(assoc.'access | 
| 1cc0 |  5f 74 6f 6b 65 6e 20 72 65 73 70 6f 6e 73 65 29    29 0a 20 20 20 20 20 20 3a 72 65 66 72 65 73 68  | _token.response)).......:refresh | 
| 1ce0 |  2d 74 6f 6b 65 6e 20 2c 72 65 66 72 65 73 68 2d    74 6f 6b 65 6e 0a 20 20 20 20 20 20 3a 65 78 70  | -token.,refresh-token.......:exp | 
| 1d00 |  69 72 61 74 69 6f 6e 20 2c 28 2b 20 28 6f 61 75    74 68 32 2d 61 75 74 6f 2d 2d 6e 6f 77 29 0a 20  | iration.,(+.(oauth2-auto--now).. | 
| 1d20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 63 64 72 20 28 61 73 73 6f 63  | .....................(cdr.(assoc | 
| 1d40 |  20 27 65 78 70 69 72 65 73 5f 69 6e 20 72 65 73    70 6f 6e 73 65 29 29 29 29 29 29 0a 0a 0a 3b 3b  | .'expires_in.response))))))...;; | 
| 1d60 |  20 43 68 65 63 6b 69 6e 67 20 74 6f 6b 65 6e 20    65 78 70 69 72 61 74 69 6f 6e 0a 0a 28 64 65 66  | .Checking.token.expiration..(def | 
| 1d80 |  75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d    6e 6f 77 20 28 29 0a 20 20 22 43 75 72 72 65 6e  | un.oauth2-auto--now.()..."Curren | 
| 1da0 |  74 20 65 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e    64 73 2c 20 61 73 20 61 6e 20 69 6e 74 65 67 65  | t.epoch.in.seconds,.as.an.intege | 
| 1dc0 |  72 2e 22 0a 20 20 28 74 72 75 6e 63 61 74 65 20    28 66 6c 6f 61 74 2d 74 69 6d 65 29 29 29 0a 0a  | r."...(truncate.(float-time))).. | 
| 1de0 |  28 64 65 66 75 6e 20 6f 61 75 74 68 32 2d 61 75    74 6f 2d 2d 70 6c 69 73 74 2d 6e 65 65 64 73 2d  | (defun.oauth2-auto--plist-needs- | 
| 1e00 |  72 65 66 72 65 73 68 69 6e 67 20 28 70 6c 69 73    74 29 0a 20 20 22 52 65 74 75 72 6e 20 6e 6f 6e  | refreshing.(plist)..."Return.non | 
| 1e20 |  2d 6e 69 6c 20 69 66 20 74 68 65 20 61 75 74 68    65 6e 74 69 63 61 74 69 6f 6e 2d 74 6f 6b 65 6e  | -nil.if.the.authentication-token | 
| 1e40 |  20 69 6e 20 50 4c 49 53 54 20 6e 65 65 64 73 20    72 65 66 72 65 73 68 69 6e 67 2e 22 0a 20 20 28  | .in.PLIST.needs.refreshing."...( | 
| 1e60 |  6f 72 20 28 6e 6f 74 20 28 70 6c 69 73 74 2d 67    65 74 20 70 6c 69 73 74 20 3a 65 78 70 69 72 61  | or.(not.(plist-get.plist.:expira | 
| 1e80 |  74 69 6f 6e 29 29 0a 20 20 20 20 20 20 28 3e 20    28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 6e 6f  | tion)).......(>.(oauth2-auto--no | 
| 1ea0 |  77 29 0a 20 20 20 20 20 20 20 20 20 28 70 6c 69    73 74 2d 67 65 74 20 70 6c 69 73 74 20 3a 65 78  | w)..........(plist-get.plist.:ex | 
| 1ec0 |  70 69 72 61 74 69 6f 6e 29 29 29 29 0a 0a 0a 3b    3b 20 43 61 63 68 65 20 61 6e 64 20 70 6c 73 74  | piration))))...;;.Cache.and.plst | 
| 1ee0 |  6f 72 65 20 72 65 61 64 2f 77 72 69 74 65 0a 0a    28 64 65 66 63 75 73 74 6f 6d 20 6f 61 75 74 68  | ore.read/write..(defcustom.oauth | 
| 1f00 |  32 2d 61 75 74 6f 2d 70 6c 73 74 6f 72 65 20 28    63 6f 6e 63 61 74 20 75 73 65 72 2d 65 6d 61 63  | 2-auto-plstore.(concat.user-emac | 
| 1f20 |  73 2d 64 69 72 65 63 74 6f 72 79 20 22 6f 61 75    74 68 32 2d 61 75 74 6f 2e 70 6c 69 73 74 22 29  | s-directory."oauth2-auto.plist") | 
| 1f40 |  0a 20 20 22 46 69 6c 65 20 74 6f 20 73 74 6f 72    65 20 74 68 65 20 61 75 74 68 65 6e 74 69 63 61  | ..."File.to.store.the.authentica | 
| 1f60 |  74 65 64 20 61 63 63 6f 75 6e 74 73 20 74 6f 2e    22 0a 20 20 3a 67 72 6f 75 70 20 27 6f 61 75 74  | ted.accounts.to."...:group.'oaut | 
| 1f80 |  68 32 2d 61 75 74 6f 0a 20 20 3a 74 79 70 65 20    27 66 69 6c 65 29 0a 0a 3b 20 54 4f 44 4f 20 72  | h2-auto...:type.'file)..;.TODO.r | 
| 1fa0 |  65 6d 6f 76 65 20 63 61 63 68 65 20 6f 72 20 69    6e 76 61 6c 69 64 61 74 65 20 69 74 20 70 72 6f  | emove.cache.or.invalidate.it.pro | 
| 1fc0 |  70 65 72 6c 79 20 77 68 65 6e 20 6f 74 68 65 72    20 70 72 6f 67 72 61 6d 73 20 77 72 69 74 65 20  | perly.when.other.programs.write. | 
| 1fe0 |  74 6f 20 64 69 73 6b 0a 28 64 65 66 76 61 72 20    6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 70 6c 73  | to.disk.(defvar.oauth2-auto--pls | 
| 2000 |  74 6f 72 65 2d 63 61 63 68 65 0a 20 20 28 6d 61    6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 20 3a 74  | tore-cache...(make-hash-table.:t | 
| 2020 |  65 73 74 20 27 65 71 75 61 6c 29 0a 20 20 22 43    61 63 68 65 20 74 68 65 20 76 61 6c 75 65 73 20  | est.'equal)..."Cache.the.values. | 
| 2040 |  77 72 69 74 74 65 6e 20 74 6f 20 61 6e 64 20 72    65 61 64 20 66 72 6f 6d 20 74 68 65 20 70 6c 73  | written.to.and.read.from.the.pls | 
| 2060 |  74 6f 72 65 2e 22 29 0a 0a 28 64 65 66 75 6e 20    6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 63 6f 6d  | tore.")..(defun.oauth2-auto--com | 
| 2080 |  70 75 74 65 2d 69 64 20 28 75 73 65 72 6e 61 6d    65 20 70 72 6f 76 69 64 65 72 29 0a 20 20 22 55  | pute-id.(username.provider)..."U | 
| 20a0 |  6e 69 71 75 65 20 49 44 20 66 6f 72 20 61 20 55    53 45 52 4e 41 4d 45 20 61 6e 64 20 50 52 4f 56  | nique.ID.for.a.USERNAME.and.PROV | 
| 20c0 |  49 44 45 52 2e 22 0a 20 20 28 75 72 6c 2d 68 65    78 69 66 79 2d 73 74 72 69 6e 67 20 28 70 70 2d  | IDER."...(url-hexify-string.(pp- | 
| 20e0 |  74 6f 2d 73 74 72 69 6e 67 20 28 6c 69 73 74 20    75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65  | to-string.(list.username.provide | 
| 2100 |  72 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 6f 61    75 74 68 32 2d 61 75 74 6f 2d 2d 70 6c 73 74 6f  | r))))..(defun.oauth2-auto--plsto | 
| 2120 |  72 65 2d 77 72 69 74 65 20 28 75 73 65 72 6e 61    6d 65 20 70 72 6f 76 69 64 65 72 20 70 6c 69 73  | re-write.(username.provider.plis | 
| 2140 |  74 29 0a 20 20 22 53 61 76 65 20 64 61 74 61 20    50 4c 49 53 54 20 66 6f 72 20 55 53 45 52 4e 41  | t)..."Save.data.PLIST.for.USERNA | 
| 2160 |  4d 45 20 61 6e 64 20 50 52 4f 56 49 44 45 52 20    74 6f 20 74 68 65 20 70 6c 73 74 6f 72 65 20 61  | ME.and.PROVIDER.to.the.plstore.a | 
| 2180 |  6e 64 20 63 61 63 68 65 2e 22 0a 20 20 28 6c 65    74 20 28 28 69 64 20 28 6f 61 75 74 68 32 2d 61  | nd.cache."...(let.((id.(oauth2-a | 
| 21a0 |  75 74 6f 2d 2d 63 6f 6d 70 75 74 65 2d 69 64 20    75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65  | uto--compute-id.username.provide | 
| 21c0 |  72 29 29 0a 20 20 20 20 20 20 20 20 28 70 6c 73    74 6f 72 65 20 28 70 6c 73 74 6f 72 65 2d 6f 70  | r)).........(plstore.(plstore-op | 
| 21e0 |  65 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 70    6c 73 74 6f 72 65 29 29 29 0a 20 20 20 20 28 75  | en.oauth2-auto-plstore))).....(u | 
| 2200 |  6e 77 69 6e 64 2d 70 72 6f 74 65 63 74 0a 20 20    20 20 20 20 20 20 28 70 72 6f 67 31 20 70 6c 69  | nwind-protect.........(prog1.pli | 
| 2220 |  73 74 0a 20 20 20 20 20 20 20 20 20 20 28 61 64    76 69 63 65 2d 61 64 64 20 23 27 69 6e 73 65 72  | st...........(advice-add.#'inser | 
| 2240 |  74 20 3a 62 65 66 6f 72 65 20 23 27 6f 61 75 74    68 32 2d 61 75 74 6f 2d 2d 69 6e 73 65 72 74 2d  | t.:before.#'oauth2-auto--insert- | 
| 2260 |  62 72 65 61 6b 2d 6f 6e 2d 73 65 63 72 65 74 2d    65 6e 74 72 69 65 73 29 0a 20 20 20 20 20 20 20  | break-on-secret-entries)........ | 
| 2280 |  20 20 20 28 70 6c 73 74 6f 72 65 2d 70 75 74 20    70 6c 73 74 6f 72 65 20 69 64 20 6e 69 6c 20 70  | ...(plstore-put.plstore.id.nil.p | 
| 22a0 |  6c 69 73 74 29 0a 20 20 20 20 20 20 20 20 20 20    3b 3b 20 53 65 65 6d 73 20 6c 69 6b 65 20 77 65  | list)...........;;.Seems.like.we | 
| 22c0 |  20 6f 63 63 61 73 69 6f 6e 61 6c 6c 79 20 65 6e    64 20 75 70 20 77 69 74 68 20 61 20 6b 69 6c 6c  | .occasionally.end.up.with.a.kill | 
| 22e0 |  65 64 20 62 75 66 66 65 72 20 69 6e 20 50 4c 53    54 4f 52 45 20 2d 20 72 65 69 6e 69 74 69 61 6c  | ed.buffer.in.PLSTORE.-.reinitial | 
| 2300 |  69 7a 65 20 69 74 20 69 6e 20 74 68 61 74 20 63    61 73 65 2e 0a 20 20 20 20 20 20 20 20 20 20 28  | ize.it.in.that.case............( | 
| 2320 |  69 66 20 28 62 75 66 66 65 72 2d 6c 69 76 65 2d    70 20 28 70 6c 73 74 6f 72 65 2d 2d 67 65 74 2d  | if.(buffer-live-p.(plstore--get- | 
| 2340 |  62 75 66 66 65 72 20 70 6c 73 74 6f 72 65 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | buffer.plstore))...............( | 
| 2360 |  70 72 6f 67 6e 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 70 6c 73 74 6f 72 65 2d 73  | progn.................(plstore-s | 
| 2380 |  61 76 65 20 70 6c 73 74 6f 72 65 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 75  | ave.plstore).................(pu | 
| 23a0 |  74 68 61 73 68 20 69 64 20 70 6c 69 73 74 20 6f    61 75 74 68 32 2d 61 75 74 6f 2d 2d 70 6c 73 74  | thash.id.plist.oauth2-auto--plst | 
| 23c0 |  6f 72 65 2d 63 61 63 68 65 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 28 70 6c 73 74 6f 72 65  | ore-cache)).............(plstore | 
| 23e0 |  2d 63 6c 6f 73 65 20 70 6c 73 74 6f 72 65 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 28 6f 61 75  | -close.plstore).............(oau | 
| 2400 |  74 68 32 2d 61 75 74 6f 2d 2d 70 6c 73 74 6f 72    65 2d 77 72 69 74 65 20 75 73 65 72 6e 61 6d 65  | th2-auto--plstore-write.username | 
| 2420 |  20 70 72 6f 76 69 64 65 72 20 70 6c 69 73 74 29    29 29 0a 20 20 20 20 20 20 28 70 6c 73 74 6f 72  | .provider.plist))).......(plstor | 
| 2440 |  65 2d 63 6c 6f 73 65 20 70 6c 73 74 6f 72 65 29    0a 20 20 20 20 20 20 28 61 64 76 69 63 65 2d 72  | e-close.plstore).......(advice-r | 
| 2460 |  65 6d 6f 76 65 20 23 27 69 6e 73 65 72 74 20 23    27 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 69 6e  | emove.#'insert.#'oauth2-auto--in | 
| 2480 |  73 65 72 74 2d 62 72 65 61 6b 2d 6f 6e 2d 73 65    63 72 65 74 2d 65 6e 74 72 69 65 73 29 29 29 29  | sert-break-on-secret-entries)))) | 
| 24a0 |  0a 0a 28 64 65 66 75 6e 20 6f 61 75 74 68 32 2d    61 75 74 6f 2d 2d 69 6e 73 65 72 74 2d 62 72 65  | ..(defun.oauth2-auto--insert-bre | 
| 24c0 |  61 6b 2d 6f 6e 2d 73 65 63 72 65 74 2d 65 6e 74    72 69 65 73 20 28 26 72 65 73 74 20 61 72 67 73  | ak-on-secret-entries.(&rest.args | 
| 24e0 |  29 0a 20 20 22 42 72 65 61 6b 20 69 66 20 74 72    79 69 6e 67 20 74 6f 20 69 6e 73 65 72 74 20 73  | )..."Break.if.trying.to.insert.s | 
| 2500 |  65 63 72 65 74 20 65 6e 74 72 69 65 73 20 6f 75    74 73 69 64 65 20 6f 66 20 70 6c 73 74 6f 72 65  | ecret.entries.outside.of.plstore | 
| 2520 |  20 62 75 66 66 65 72 2e 0a 41 52 47 53 20 61 72    65 20 74 68 6f 73 65 20 70 61 73 73 65 64 20 74  | .buffer..ARGS.are.those.passed.t | 
| 2540 |  6f 20 e2 80 98 69 6e 73 65 72 74 e2 80 99 2e 0a    0a 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69  | o....insert......This.function.i | 
| 2560 |  73 20 61 64 64 65 64 20 61 73 20 62 65 66 6f 72    65 20 61 64 76 69 63 65 20 74 6f 20 e2 80 98 69  | s.added.as.before.advice.to....i | 
| 2580 |  6e 73 65 72 74 e2 80 99 20 74 6f 20 61 74 74 65    6d 70 74 20 74 6f 20 72 65 70 72 6f 64 75 63 65  | nsert....to.attempt.to.reproduce | 
| 25a0 |  20 61 6e 64 0a 66 69 78 20 68 74 74 70 73 3a 2f    2f 67 69 74 68 75 62 2e 63 6f 6d 2f 72 68 61 70  | .and.fix.https://github.com/rhap | 
| 25c0 |  73 30 64 79 2f 65 6d 61 63 73 2d 6f 61 75 74 68    32 2d 61 75 74 6f 2f 69 73 73 75 65 73 2f 36 2e  | s0dy/emacs-oauth2-auto/issues/6. | 
| 25e0 |  22 0a 20 20 28 77 68 65 6e 0a 20 20 20 20 20 20    28 61 6e 64 0a 20 20 20 20 20 20 20 28 73 74 72  | "...(when.......(and........(str | 
| 2600 |  69 6e 67 70 20 28 62 75 66 66 65 72 2d 66 69 6c    65 2d 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20  | ingp.(buffer-file-name))........ | 
| 2620 |  28 6e 6f 74 20 28 66 69 6c 65 2d 65 71 75 61 6c    2d 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | (not.(file-equal-p.............. | 
| 2640 |  28 66 69 6c 65 2d 74 72 75 65 6e 61 6d 65 20 6f    61 75 74 68 32 2d 61 75 74 6f 2d 70 6c 73 74 6f  | (file-truename.oauth2-auto-plsto | 
| 2660 |  72 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 28 66 69 6c 65 2d 74 72 75 65 6e 61 6d 65 20  | re)..............(file-truename. | 
| 2680 |  28 62 75 66 66 65 72 2d 66 69 6c 65 2d 6e 61 6d    65 29 29 29 29 0a 20 20 20 20 20 20 20 28 65 71  | (buffer-file-name))))........(eq | 
| 26a0 |  75 61 6c 20 22 3b 3b 3b 20 73 65 63 72 65 74 20    65 6e 74 72 69 65 73 5c 6e 22 20 28 6e 74 68 20  | ual.";;;.secret.entries\n".(nth. | 
| 26c0 |  30 20 61 72 67 73 29 29 0a 20 20 20 20 20 20 20    28 62 61 63 6b 74 72 61 63 65 2d 66 72 61 6d 65  | 0.args))........(backtrace-frame | 
| 26e0 |  73 20 27 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d    70 6c 73 74 6f 72 65 2d 77 72 69 74 65 29 29 0a  | s.'oauth2-auto--plstore-write)). | 
| 2700 |  20 20 20 20 28 65 72 72 6f 72 20 22 42 55 47 3a    20 41 74 74 65 6d 70 74 65 64 20 74 6f 20 77 72  | ....(error."BUG:.Attempted.to.wr | 
| 2720 |  69 74 65 20 e2 80 98 6f 61 75 74 68 32 2d 61 75    74 6f e2 80 99 20 6b 65 79 73 20 74 6f 20 25 73  | ite....oauth2-auto....keys.to.%s | 
| 2740 |  2c 20 6e 6f 74 20 e2 80 98 6f 61 75 74 68 32 2d    61 75 74 6f 2d 70 6c 73 74 6f 72 65 e2 80 99 20  | ,.not....oauth2-auto-plstore.... | 
| 2760 |  28 25 73 29 2e 20 20 50 6c 65 61 73 65 20 72 65    70 6f 72 74 20 74 6f 20 68 74 74 70 73 3a 2f 2f  | (%s)...Please.report.to.https:// | 
| 2780 |  67 69 74 68 75 62 2e 63 6f 6d 2f 72 68 61 70 73    30 64 79 2f 65 6d 61 63 73 2d 6f 61 75 74 68 32  | github.com/rhaps0dy/emacs-oauth2 | 
| 27a0 |  2d 61 75 74 6f 2f 69 73 73 75 65 73 2f 36 2e 25    73 22 0a 20 20 20 20 20 20 20 20 20 20 20 28 62  | -auto/issues/6.%s"............(b | 
| 27c0 |  75 66 66 65 72 2d 66 69 6c 65 2d 6e 61 6d 65 29    20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 70 6c 73  | uffer-file-name).oauth2-auto-pls | 
| 27e0 |  74 6f 72 65 0a 20 20 20 20 20 20 20 20 20 20 20    28 69 66 20 28 61 6e 64 20 28 72 65 71 75 69 72  | tore............(if.(and.(requir | 
| 2800 |  65 20 27 62 61 63 6b 74 72 61 63 65 20 6e 69 6c    20 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  | e.'backtrace.nil.t)............. | 
| 2820 |  20 20 20 20 20 20 20 20 28 66 62 6f 75 6e 64 70    20 27 62 61 63 6b 74 72 61 63 65 2d 70 72 69 6e  | ........(fboundp.'backtrace-prin | 
| 2840 |  74 2d 74 6f 2d 73 74 72 69 6e 67 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f  | t-to-string))................(co | 
| 2860 |  6e 63 61 74 20 22 20 42 61 63 6b 74 72 61 63 65    3a 5c 6e 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  | ncat.".Backtrace:\n\n".......... | 
| 2880 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 62    61 63 6b 74 72 61 63 65 2d 70 72 69 6e 74 2d 74  | ..............(backtrace-print-t | 
| 28a0 |  6f 2d 73 74 72 69 6e 67 20 28 62 61 63 6b 74 72    61 63 65 2d 66 72 61 6d 65 73 20 27 6f 61 75 74  | o-string.(backtrace-frames.'oaut | 
| 28c0 |  68 32 2d 61 75 74 6f 2d 2d 70 6c 73 74 6f 72 65    2d 77 72 69 74 65 29 29 29 0a 20 20 20 20 20 20  | h2-auto--plstore-write)))....... | 
| 28e0 |  20 20 20 20 20 20 20 22 22 29 29 29 29 0a 0a 0a    28 64 65 66 75 6e 20 6f 61 75 74 68 32 2d 61 75  | .......""))))...(defun.oauth2-au | 
| 2900 |  74 6f 2d 2d 70 6c 73 74 6f 72 65 2d 72 65 61 64    20 28 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69  | to--plstore-read.(username.provi | 
| 2920 |  64 65 72 29 0a 20 20 22 52 65 61 64 20 74 68 65    20 64 61 74 61 20 66 6f 72 20 55 53 45 52 4e 41  | der)..."Read.the.data.for.USERNA | 
| 2940 |  4d 45 20 61 6e 64 20 50 52 4f 56 49 44 45 52 20    66 72 6f 6d 20 74 68 65 20 63 61 63 68 65 2c 20  | ME.and.PROVIDER.from.the.cache,. | 
| 2960 |  65 6c 73 65 20 66 72 6f 6d 20 70 6c 73 74 6f 72    65 2e 0a 43 61 63 68 65 20 64 61 74 61 20 69 66  | else.from.plstore..Cache.data.if | 
| 2980 |  20 61 20 6d 69 73 73 20 6f 63 63 75 72 73 2e 22    0a 20 20 28 6c 65 74 20 28 28 69 64 20 28 6f 61  | .a.miss.occurs."...(let.((id.(oa | 
| 29a0 |  75 74 68 32 2d 61 75 74 6f 2d 2d 63 6f 6d 70 75    74 65 2d 69 64 20 75 73 65 72 6e 61 6d 65 20 70  | uth2-auto--compute-id.username.p | 
| 29c0 |  72 6f 76 69 64 65 72 29 29 29 0a 20 20 20 20 3b    20 41 73 73 75 6d 65 20 63 61 63 68 65 20 69 73  | rovider))).....;.Assume.cache.is | 
| 29e0 |  20 69 6e 76 61 6c 69 64 61 74 65 64 2e 20 46 49    58 4d 45 0a 20 20 20 20 28 6f 72 20 6e 69 6c 20  | .invalidated..FIXME.....(or.nil. | 
| 2a00 |  3b 28 67 65 74 68 61 73 68 20 69 64 20 6f 61 75    74 68 32 2d 61 75 74 6f 2d 2d 70 6c 73 74 6f 72  | ;(gethash.id.oauth2-auto--plstor | 
| 2a20 |  65 2d 63 61 63 68 65 29 0a 20 20 20 20 20 20 20    20 28 6c 65 74 20 28 28 70 6c 73 74 6f 72 65 20  | e-cache).........(let.((plstore. | 
| 2a40 |  28 70 6c 73 74 6f 72 65 2d 6f 70 65 6e 20 6f 61    75 74 68 32 2d 61 75 74 6f 2d 70 6c 73 74 6f 72  | (plstore-open.oauth2-auto-plstor | 
| 2a60 |  65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28    75 6e 77 69 6e 64 2d 70 72 6f 74 65 63 74 0a 20  | e)))...........(unwind-protect.. | 
| 2a80 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 75    74 68 61 73 68 20 69 64 0a 20 20 20 20 20 20 20  | .............(puthash.id........ | 
| 2aa0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 63 64 72 20 28 70 6c 73 74 6f 72 65 2d 67 65  | ................(cdr.(plstore-ge | 
| 2ac0 |  74 20 70 6c 73 74 6f 72 65 20 69 64 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | t.plstore.id)).................. | 
| 2ae0 |  20 20 20 20 20 20 6f 61 75 74 68 32 2d 61 75 74    6f 2d 2d 70 6c 73 74 6f 72 65 2d 63 61 63 68 65  | ......oauth2-auto--plstore-cache | 
| 2b00 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 70    6c 73 74 6f 72 65 2d 63 6c 6f 73 65 20 70 6c 73  | ).............(plstore-close.pls | 
| 2b20 |  74 6f 72 65 29 29 29 29 29 29 0a 0a 0a 0a 3b 3b    20 4d 61 69 6e 20 65 6e 74 72 79 20 70 6f 69 6e  | tore))))))....;;.Main.entry.poin | 
| 2b40 |  74 0a 0a 28 61 69 6f 2d 64 65 66 75 6e 20 6f 61    75 74 68 32 2d 61 75 74 6f 2d 70 6c 69 73 74 20  | t..(aio-defun.oauth2-auto-plist. | 
| 2b60 |  28 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64    65 72 29 0a 20 20 22 52 65 74 75 72 6e 73 20 61  | (username.provider)..."Returns.a | 
| 2b80 |  6e 20 5c 5c 3d 27 6f 61 75 74 68 32 2d 74 6f 6b    65 6e 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  | n.\\='oauth2-token.structure.for | 
| 2ba0 |  20 55 53 45 52 4e 41 4d 45 20 61 6e 64 20 50 52    4f 56 49 44 45 52 2e 22 0a 20 20 3b 20 43 68 65  | .USERNAME.and.PROVIDER."...;.Che | 
| 2bc0 |  63 6b 20 74 68 65 20 70 6c 73 74 6f 72 65 20 66    6f 72 20 74 68 65 20 72 65 71 75 65 73 74 65 64  | ck.the.plstore.for.the.requested | 
| 2be0 |  20 75 73 65 72 6e 61 6d 65 20 61 6e 64 20 70 72    6f 76 69 64 65 72 0a 20 20 28 6c 65 74 20 28 28  | .username.and.provider...(let.(( | 
| 2c00 |  70 6c 69 73 74 20 28 6f 61 75 74 68 32 2d 61 75    74 6f 2d 2d 70 6c 73 74 6f 72 65 2d 72 65 61 64  | plist.(oauth2-auto--plstore-read | 
| 2c20 |  20 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64    65 72 29 29 29 0a 20 20 20 20 28 69 66 20 28 6e  | .username.provider))).....(if.(n | 
| 2c40 |  6f 74 20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d    2d 70 6c 69 73 74 2d 6e 65 65 64 73 2d 72 65 66  | ot.(oauth2-auto--plist-needs-ref | 
| 2c60 |  72 65 73 68 69 6e 67 20 70 6c 69 73 74 29 29 0a    20 20 20 20 20 20 20 20 3b 20 49 66 20 65 78 70  | reshing.plist)).........;.If.exp | 
| 2c80 |  69 72 61 74 69 6f 6e 20 74 69 6d 65 20 69 73 20    66 6f 75 6e 64 20 61 6e 64 20 68 61 73 6e 27 74  | iration.time.is.found.and.hasn't | 
| 2ca0 |  20 68 61 70 70 65 6e 65 64 20 79 65 74 0a 20 20    20 20 20 20 20 20 70 6c 69 73 74 0a 20 20 20 20  | .happened.yet.........plist..... | 
| 2cc0 |  20 20 3b 20 4f 74 68 65 72 77 69 73 65 20 72 65    66 72 65 73 68 20 6f 72 20 61 75 74 68 65 6e 74  | ..;.Otherwise.refresh.or.authent | 
| 2ce0 |  69 63 61 74 65 20 74 68 65 20 75 73 65 72 2c 20    61 6e 64 20 77 72 69 74 65 20 74 68 65 20 72 65  | icate.the.user,.and.write.the.re | 
| 2d00 |  73 75 6c 74 20 74 6f 0a 20 20 20 20 20 20 3b 20    70 6c 73 74 6f 72 65 2e 0a 20 20 20 20 20 20 28  | sult.to.......;.plstore........( | 
| 2d20 |  6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 70 6c 73    74 6f 72 65 2d 77 72 69 74 65 0a 20 20 20 20 20  | oauth2-auto--plstore-write...... | 
| 2d40 |  20 20 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69    64 65 72 0a 20 20 20 20 20 20 20 28 61 69 6f 2d  | ..username.provider........(aio- | 
| 2d60 |  61 77 61 69 74 0a 20 20 20 20 20 20 20 20 28 6f    61 75 74 68 32 2d 61 75 74 6f 2d 72 65 66 72 65  | await.........(oauth2-auto-refre | 
| 2d80 |  73 68 2d 6f 72 2d 61 75 74 68 65 6e 74 69 63 61    74 65 20 75 73 65 72 6e 61 6d 65 20 70 72 6f 76  | sh-or-authenticate.username.prov | 
| 2da0 |  69 64 65 72 20 70 6c 69 73 74 29 29 29 29 29 29    0a 0a 28 61 69 6f 2d 64 65 66 75 6e 20 6f 61 75  | ider.plist))))))..(aio-defun.oau | 
| 2dc0 |  74 68 32 2d 61 75 74 6f 2d 66 6f 72 63 65 2d 72    65 61 75 74 68 20 28 75 73 65 72 6e 61 6d 65 20  | th2-auto-force-reauth.(username. | 
| 2de0 |  70 72 6f 76 69 64 65 72 29 0a 20 20 22 41 75 74    68 65 6e 74 69 63 61 74 65 73 20 55 53 45 52 4e  | provider)..."Authenticates.USERN | 
| 2e00 |  41 4d 45 20 77 69 74 68 20 50 52 4f 56 49 44 45    52 20 61 67 61 69 6e 20 61 6e 64 20 73 61 76 65  | AME.with.PROVIDER.again.and.save | 
| 2e20 |  73 20 74 6f 20 74 68 65 20 70 6c 73 74 6f 72 65    2e 22 0a 20 20 28 6f 61 75 74 68 32 2d 61 75 74  | s.to.the.plstore."...(oauth2-aut | 
| 2e40 |  6f 2d 2d 70 6c 73 74 6f 72 65 2d 77 72 69 74 65    0a 20 20 20 75 73 65 72 6e 61 6d 65 20 70 72 6f  | o--plstore-write....username.pro | 
| 2e60 |  76 69 64 65 72 0a 20 20 20 28 61 69 6f 2d 61 77    61 69 74 0a 20 20 20 20 28 6f 61 75 74 68 32 2d  | vider....(aio-await.....(oauth2- | 
| 2e80 |  61 75 74 6f 2d 61 75 74 68 65 6e 74 69 63 61 74    65 20 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69  | auto-authenticate.username.provi | 
| 2ea0 |  64 65 72 29 29 29 29 0a 0a 0a 28 64 65 66 75 6e    20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 70 6f 6c  | der))))...(defun.oauth2-auto-pol | 
| 2ec0 |  6c 2d 70 72 6f 6d 69 73 65 20 28 70 72 6f 6d 69    73 65 29 0a 20 20 22 53 79 6e 63 68 72 6f 6e 6f  | l-promise.(promise)..."Synchrono | 
| 2ee0 |  75 73 6c 79 20 77 61 69 74 20 66 6f 72 20 50 52    4f 4d 49 53 45 2c 20 70 6f 6c 6c 69 6e 67 20 65  | usly.wait.for.PROMISE,.polling.e | 
| 2f00 |  76 65 72 79 20 53 45 43 4f 4e 44 53 20 73 65 63    6f 6e 64 73 2e 22 0a 20 20 28 6c 65 74 20 28 28  | very.SECONDS.seconds."...(let.(( | 
| 2f20 |  73 65 63 6f 6e 64 73 20 33 29 29 0a 20 20 20 28    77 68 69 6c 65 20 28 6e 75 6c 6c 20 28 61 69 6f  | seconds.3))....(while.(null.(aio | 
| 2f40 |  2d 72 65 73 75 6c 74 20 70 72 6f 6d 69 73 65 29    29 0a 20 20 20 20 20 28 73 6c 65 65 70 2d 66 6f  | -result.promise))......(sleep-fo | 
| 2f60 |  72 20 73 65 63 6f 6e 64 73 29 29 0a 20 20 20 28    66 75 6e 63 61 6c 6c 20 28 61 69 6f 2d 72 65 73  | r.seconds))....(funcall.(aio-res | 
| 2f80 |  75 6c 74 20 70 72 6f 6d 69 73 65 29 29 29 29 0a    0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a  | ult.promise))))..;;;###autoload. | 
| 2fa0 |  28 64 65 66 75 6e 20 6f 61 75 74 68 32 2d 61 75    74 6f 2d 70 6c 69 73 74 2d 73 79 6e 63 20 28 75  | (defun.oauth2-auto-plist-sync.(u | 
| 2fc0 |  73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65 72    29 0a 20 20 22 53 79 6e 63 68 72 6f 6e 6f 75 73  | sername.provider)..."Synchronous | 
| 2fe0 |  6c 79 20 63 61 6c 6c 20 e2 80 98 6f 61 75 74 68    32 2d 61 75 74 6f 2d 70 6c 69 73 74 e2 80 99 20  | ly.call....oauth2-auto-plist.... | 
| 3000 |  61 6e 64 20 72 65 74 75 72 6e 20 72 65 73 75 6c    74 2e 0a 46 6f 72 20 55 53 45 52 4e 41 4d 45 20  | and.return.result..For.USERNAME. | 
| 3020 |  61 6e 64 20 50 52 4f 56 49 44 45 52 2c 20 73 65    65 2e 22 0a 20 20 28 6f 61 75 74 68 32 2d 61 75  | and.PROVIDER,.see."...(oauth2-au | 
| 3040 |  74 6f 2d 70 6f 6c 6c 2d 70 72 6f 6d 69 73 65 20    28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 70 6c 69  | to-poll-promise.(oauth2-auto-pli | 
| 3060 |  73 74 20 75 73 65 72 6e 61 6d 65 20 70 72 6f 76    69 64 65 72 29 29 29 0a 0a 28 61 69 6f 2d 64 65  | st.username.provider)))..(aio-de | 
| 3080 |  66 75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d    61 63 63 65 73 73 2d 74 6f 6b 65 6e 20 28 75 73  | fun.oauth2-auto-access-token.(us | 
| 30a0 |  65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65 72 29    0a 20 20 22 52 65 74 75 72 6e 73 20 61 63 63 65  | ername.provider)..."Returns.acce | 
| 30c0 |  73 73 2d 74 6f 6b 65 6e 20 73 74 72 69 6e 67 20    75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  | ss-token.string.used.to.authenti | 
| 30e0 |  63 61 74 65 20 55 53 45 52 4e 41 4d 45 20 74 6f    20 50 52 4f 56 49 44 45 52 2e 22 0a 20 20 28 70  | cate.USERNAME.to.PROVIDER."...(p | 
| 3100 |  6c 69 73 74 2d 67 65 74 20 28 61 69 6f 2d 61 77    61 69 74 20 28 6f 61 75 74 68 32 2d 61 75 74 6f  | list-get.(aio-await.(oauth2-auto | 
| 3120 |  2d 70 6c 69 73 74 20 75 73 65 72 6e 61 6d 65 20    70 72 6f 76 69 64 65 72 29 29 0a 20 20 20 20 20  | -plist.username.provider))...... | 
| 3140 |  20 20 20 20 20 20 20 20 3a 61 63 63 65 73 73 2d    74 6f 6b 65 6e 29 29 0a 0a 3b 3b 3b 23 23 23 61  | ........:access-token))..;;;###a | 
| 3160 |  75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 6f    61 75 74 68 32 2d 61 75 74 6f 2d 61 63 63 65 73  | utoload.(defun.oauth2-auto-acces | 
| 3180 |  73 2d 74 6f 6b 65 6e 2d 73 79 6e 63 20 28 75 73    65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65 72 29  | s-token-sync.(username.provider) | 
| 31a0 |  0a 20 20 22 53 79 6e 63 68 72 6f 6e 6f 75 73 6c    79 20 63 61 6c 6c 20 e2 80 98 6f 61 75 74 68 32  | ..."Synchronously.call....oauth2 | 
| 31c0 |  2d 61 75 74 6f 2d 61 63 63 65 73 73 2d 74 6f 6b    65 6e e2 80 99 20 61 6e 64 20 72 65 74 75 72 6e  | -auto-access-token....and.return | 
| 31e0 |  20 72 65 73 75 6c 74 2e 0a 46 6f 72 20 55 53 45    52 4e 41 4d 45 20 61 6e 64 20 50 52 4f 56 49 44  | .result..For.USERNAME.and.PROVID | 
| 3200 |  45 52 2c 20 73 65 65 2e 22 0a 20 20 28 6f 61 75    74 68 32 2d 61 75 74 6f 2d 70 6f 6c 6c 2d 70 72  | ER,.see."...(oauth2-auto-poll-pr | 
| 3220 |  6f 6d 69 73 65 20 28 6f 61 75 74 68 32 2d 61 75    74 6f 2d 61 63 63 65 73 73 2d 74 6f 6b 65 6e 20  | omise.(oauth2-auto-access-token. | 
| 3240 |  75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65    72 29 29 29 0a 0a 0a 3b 3b 20 4d 61 6b 69 6e 67  | username.provider)))...;;.Making | 
| 3260 |  20 61 6e 64 20 65 6e 63 6f 64 69 6e 67 20 72 65    71 75 65 73 74 73 0a 0a 28 64 65 66 75 6e 20 6f  | .and.encoding.requests..(defun.o | 
| 3280 |  61 75 74 68 32 2d 61 75 74 6f 2d 2d 70 72 6f 76    69 64 65 72 2d 69 6e 66 6f 20 28 70 72 6f 76 69  | auth2-auto--provider-info.(provi | 
| 32a0 |  64 65 72 29 0a 20 20 22 47 65 74 20 64 61 74 61    20 66 6f 72 20 50 52 4f 56 49 44 45 52 20 66 72  | der)..."Get.data.for.PROVIDER.fr | 
| 32c0 |  6f 6d 20 60 6f 61 75 74 68 32 2d 61 75 74 6f 2d    70 72 6f 76 69 64 65 72 73 2d 61 6c 69 73 74 27  | om.`oauth2-auto-providers-alist' | 
| 32e0 |  2e 22 0a 20 20 28 6c 65 74 20 28 28 70 72 6f 76    69 64 65 72 2d 69 6e 66 6f 20 28 63 64 72 20 28  | ."...(let.((provider-info.(cdr.( | 
| 3300 |  61 73 73 6f 63 20 70 72 6f 76 69 64 65 72 20 28    6f 61 75 74 68 32 2d 61 75 74 6f 2d 70 72 6f 76  | assoc.provider.(oauth2-auto-prov | 
| 3320 |  69 64 65 72 73 2d 61 6c 69 73 74 29 29 29 29 29    0a 20 20 20 20 28 77 68 65 6e 20 28 6e 6f 74 20  | iders-alist))))).....(when.(not. | 
| 3340 |  70 72 6f 76 69 64 65 72 2d 69 6e 66 6f 29 0a 20    20 20 20 20 20 28 65 72 72 6f 72 20 22 6f 61 75  | provider-info).......(error."oau | 
| 3360 |  74 68 32 2d 61 75 74 6f 3a 20 55 6e 6b 6e 6f 77    6e 20 70 72 6f 76 69 64 65 72 3a 20 25 73 22 20  | th2-auto:.Unknown.provider:.%s". | 
| 3380 |  70 72 6f 76 69 64 65 72 29 29 0a 20 20 20 20 28    64 6f 6c 69 73 74 20 28 6b 65 79 20 27 28 63 6c  | provider)).....(dolist.(key.'(cl | 
| 33a0 |  69 65 6e 74 5f 69 64 20 63 6c 69 65 6e 74 5f 73    65 63 72 65 74 29 29 0a 20 20 20 20 20 20 20 20  | ient_id.client_secret))......... | 
| 33c0 |  28 77 68 65 6e 20 28 65 71 75 61 6c 20 22 22 20    28 63 64 72 20 28 61 73 73 6f 63 20 6b 65 79 20  | (when.(equal."".(cdr.(assoc.key. | 
| 33e0 |  70 72 6f 76 69 64 65 72 2d 69 6e 66 6f 29 29 29    0a 20 20 20 20 20 20 20 20 20 28 65 72 72 6f 72  | provider-info)))..........(error | 
| 3400 |  20 22 6f 61 75 74 68 32 2d 61 75 74 6f 3a 20 50    72 6f 76 69 64 65 72 20 25 73 20 77 61 73 20 72  | ."oauth2-auto:.Provider.%s.was.r | 
| 3420 |  65 71 75 65 73 74 65 64 20 62 75 74 20 68 61 73    20 6e 6f 20 60 25 73 27 20 73 70 65 63 69 66 69  | equested.but.has.no.`%s'.specifi | 
| 3440 |  65 64 22 20 70 72 6f 76 69 64 65 72 20 6b 65 79    29 29 29 0a 20 20 20 20 70 72 6f 76 69 64 65 72  | ed".provider.key))).....provider | 
| 3460 |  2d 69 6e 66 6f 29 29 0a 0a 28 64 65 66 75 6e 20    6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 75 72 6c  | -info))..(defun.oauth2-auto--url | 
| 3480 |  69 66 79 2d 72 65 71 75 65 73 74 20 28 61 6c 69    73 74 29 0a 20 20 22 4d 61 6b 65 20 41 4c 49 53  | ify-request.(alist)..."Make.ALIS | 
| 34a0 |  54 20 6f 66 20 28 73 79 6d 62 6f 6c 20 2e 20 73    74 72 69 6e 67 29 20 69 6e 74 6f 20 55 52 4c 2d  | T.of.(symbol...string).into.URL- | 
| 34c0 |  66 6f 72 6d 61 74 74 65 64 20 72 65 71 75 65 73    74 2e 22 0a 20 20 28 6d 61 70 63 6f 6e 63 61 74  | formatted.request."...(mapconcat | 
| 34e0 |  20 28 6c 61 6d 62 64 61 20 28 73 29 20 28 63 6f    6e 63 61 74 20 28 75 72 6c 2d 68 65 78 69 66 79  | .(lambda.(s).(concat.(url-hexify | 
| 3500 |  2d 73 74 72 69 6e 67 20 28 73 79 6d 62 6f 6c 2d    6e 61 6d 65 20 28 63 61 72 20 73 29 29 29 0a 20  | -string.(symbol-name.(car.s))).. | 
| 3520 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ................................ | 
| 3540 |  22 3d 22 20 28 75 72 6c 2d 68 65 78 69 66 79 2d    73 74 72 69 6e 67 20 28 63 64 72 20 73 29 29 29  | "=".(url-hexify-string.(cdr.s))) | 
| 3560 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 61    6c 69 73 74 20 22 26 22 29 29 0a 0a 28 64 65 66  | )..............alist."&"))..(def | 
| 3580 |  75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d    63 72 61 66 74 2d 72 65 71 75 65 73 74 2d 61 6c  | un.oauth2-auto--craft-request-al | 
| 35a0 |  69 73 74 20 28 70 72 6f 76 69 64 65 72 2d 69 6e    66 6f 20 64 61 74 61 2d 6b 65 79 73 20 65 78 74  | ist.(provider-info.data-keys.ext | 
| 35c0 |  72 61 2d 61 6c 69 73 74 29 0a 20 20 22 4d 61 6b    65 20 72 65 71 75 65 73 74 20 66 6f 72 20 50 52  | ra-alist)..."Make.request.for.PR | 
| 35e0 |  4f 56 49 44 45 52 2d 49 4e 46 4f 20 75 73 69 6e    67 20 74 68 65 20 69 6e 66 6f 20 69 6e 20 44 41  | OVIDER-INFO.using.the.info.in.DA | 
| 3600 |  54 41 2d 4b 45 59 53 20 61 6e 64 20 45 58 54 52    41 2d 41 4c 49 53 54 2e 22 0a 20 20 28 61 70 70  | TA-KEYS.and.EXTRA-ALIST."...(app | 
| 3620 |  65 6e 64 20 28 2d 2d 66 69 6c 74 65 72 20 28 6d    65 6d 71 20 28 63 61 72 20 69 74 29 20 64 61 74  | end.(--filter.(memq.(car.it).dat | 
| 3640 |  61 2d 6b 65 79 73 29 20 70 72 6f 76 69 64 65 72    2d 69 6e 66 6f 29 20 65 78 74 72 61 2d 61 6c 69  | a-keys).provider-info).extra-ali | 
| 3660 |  73 74 29 29 0a 0a 28 64 65 66 75 6e 20 6f 61 75    74 68 32 2d 61 75 74 6f 2d 2d 72 65 71 75 65 73  | st))..(defun.oauth2-auto--reques | 
| 3680 |  74 2d 61 63 63 65 73 73 2d 70 61 72 73 65 20 28    29 0a 20 20 22 50 61 72 73 65 20 74 68 65 20 72  | t-access-parse.()..."Parse.the.r | 
| 36a0 |  65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 41 75 74    68 20 72 65 71 75 65 73 74 2e 0a 0a 43 6f 64 65  | esult.of.an.OAuth.request...Code | 
| 36c0 |  20 66 72 6f 6d 20 60 6f 61 75 74 68 32 2e 65 6c    27 2c 20 6c 69 63 65 6e 73 65 64 20 75 6e 64 65  | .from.`oauth2.el',.licensed.unde | 
| 36e0 |  72 20 47 50 4c 76 33 2b 2e 0a 53 65 65 20 68 74    74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d  | r.GPLv3+..See.https://github.com | 
| 3700 |  2f 65 6d 61 63 73 6d 69 72 72 6f 72 2f 6f 61 75    74 68 32 2e 22 0a 20 20 28 67 6f 74 6f 2d 63 68  | /emacsmirror/oauth2."...(goto-ch | 
| 3720 |  61 72 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29 0a    20 20 28 77 68 65 6e 20 28 73 65 61 72 63 68 2d  | ar.(point-min))...(when.(search- | 
| 3740 |  66 6f 72 77 61 72 64 2d 72 65 67 65 78 70 20 22    5e 24 22 20 6e 69 6c 20 74 29 0a 20 20 20 20 28  | forward-regexp."^$".nil.t).....( | 
| 3760 |  6a 73 6f 6e 2d 72 65 61 64 29 29 29 0a 0a 28 61    69 6f 2d 64 65 66 75 6e 20 6f 61 75 74 68 32 2d  | json-read)))..(aio-defun.oauth2- | 
| 3780 |  61 75 74 6f 2d 2d 72 65 71 75 65 73 74 20 28 70    72 6f 76 69 64 65 72 20 75 72 6c 2d 6b 65 79 20  | auto--request.(provider.url-key. | 
| 37a0 |  64 61 74 61 2d 6b 65 79 73 20 65 78 74 72 61 2d    61 6c 69 73 74 29 0a 20 20 22 41 73 79 6e 63 68  | data-keys.extra-alist)..."Asynch | 
| 37c0 |  72 6f 6e 6f 75 73 6c 79 20 73 65 6e 64 20 61 20    50 4f 53 54 20 72 65 71 75 65 73 74 20 74 6f 20  | ronously.send.a.POST.request.to. | 
| 37e0 |  4f 41 75 74 68 32 20 50 52 4f 56 49 44 45 52 2e    0a 50 52 4f 56 49 44 45 52 20 75 73 65 73 20 74  | OAuth2.PROVIDER..PROVIDER.uses.t | 
| 3800 |  68 65 20 75 72 6c 20 61 6e 64 20 64 61 74 61 20    73 70 65 63 69 66 69 65 64 20 75 6e 64 65 72 20  | he.url.and.data.specified.under. | 
| 3820 |  55 52 4c 2d 4b 45 59 20 61 6e 64 0a 44 41 54 41    2d 4b 45 59 53 20 69 6e 20 74 68 65 20 70 72 6f  | URL-KEY.and.DATA-KEYS.in.the.pro | 
| 3840 |  76 69 64 65 72 20 69 6e 66 6f 20 28 73 65 65 20    60 6f 61 75 74 68 32 2d 61 75 74 6f 2d 70 72 6f  | vider.info.(see.`oauth2-auto-pro | 
| 3860 |  76 69 64 65 72 73 2d 61 6c 69 73 74 27 29 2e 0a    41 6c 73 6f 20 73 65 6e 64 20 64 61 74 61 20 69  | viders-alist')..Also.send.data.i | 
| 3880 |  6e 20 45 58 54 52 41 2d 41 4c 49 53 54 2e 22 0a    20 20 28 6c 65 74 2a 20 28 0a 20 20 20 20 20 20  | n.EXTRA-ALIST."...(let*.(....... | 
| 38a0 |  20 20 20 3b 3b 20 43 72 61 66 74 20 74 68 65 20    72 65 71 75 65 73 74 20 66 69 72 73 74 0a 20 20  | ...;;.Craft.the.request.first... | 
| 38c0 |  20 20 20 20 20 20 20 28 70 72 6f 76 69 64 65 72    2d 69 6e 66 6f 20 28 6f 61 75 74 68 32 2d 61 75  | .......(provider-info.(oauth2-au | 
| 38e0 |  74 6f 2d 2d 70 72 6f 76 69 64 65 72 2d 69 6e 66    6f 20 70 72 6f 76 69 64 65 72 29 29 0a 20 20 20  | to--provider-info.provider)).... | 
| 3900 |  20 20 20 20 20 20 28 75 72 6c 20 28 63 64 72 20    28 61 73 73 6f 63 20 75 72 6c 2d 6b 65 79 20 70  | ......(url.(cdr.(assoc.url-key.p | 
| 3920 |  72 6f 76 69 64 65 72 2d 69 6e 66 6f 29 29 29 0a    20 20 20 20 20 20 20 20 20 28 64 61 74 61 2d 61  | rovider-info)))..........(data-a | 
| 3940 |  6c 69 73 74 20 28 6f 61 75 74 68 32 2d 61 75 74    6f 2d 2d 63 72 61 66 74 2d 72 65 71 75 65 73 74  | list.(oauth2-auto--craft-request | 
| 3960 |  2d 61 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f  | -alist.......................pro | 
| 3980 |  76 69 64 65 72 2d 69 6e 66 6f 20 64 61 74 61 2d    6b 65 79 73 20 65 78 74 72 61 2d 61 6c 69 73 74  | vider-info.data-keys.extra-alist | 
| 39a0 |  29 29 0a 20 20 20 20 20 20 20 20 20 28 64 61 74    61 20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d  | ))..........(data.(oauth2-auto-- | 
| 39c0 |  75 72 6c 69 66 79 2d 72 65 71 75 65 73 74 20 64    61 74 61 2d 61 6c 69 73 74 29 29 0a 20 20 20 20  | urlify-request.data-alist))..... | 
| 39e0 |  20 20 20 20 20 3b 3b 20 50 61 72 61 6d 65 74 65    72 73 20 66 6f 72 20 60 75 72 6c 2d 72 65 74 72  | .....;;.Parameters.for.`url-retr | 
| 3a00 |  69 65 76 65 27 20 69 6e 73 69 64 65 20 60 61 69    6f 2d 75 72 6c 2d 72 65 74 72 69 65 76 65 27 0a  | ieve'.inside.`aio-url-retrieve'. | 
| 3a20 |  20 20 20 20 20 20 20 20 20 28 75 72 6c 2d 72 65    67 69 73 74 65 72 65 64 2d 61 75 74 68 2d 73 63  | .........(url-registered-auth-sc | 
| 3a40 |  68 65 6d 65 73 20 6e 69 6c 29 0a 20 20 20 20 20    20 20 20 20 28 75 72 6c 2d 72 65 71 75 65 73 74  | hemes.nil)..........(url-request | 
| 3a60 |  2d 6d 65 74 68 6f 64 20 22 50 4f 53 54 22 29 0a    20 20 20 20 20 20 20 20 20 28 75 72 6c 2d 72 65  | -method."POST")..........(url-re | 
| 3a80 |  71 75 65 73 74 2d 64 61 74 61 20 64 61 74 61 29    0a 20 20 20 20 20 20 20 20 20 28 75 72 6c 2d 72  | quest-data.data)..........(url-r | 
| 3aa0 |  65 71 75 65 73 74 2d 65 78 74 72 61 2d 68 65 61    64 65 72 73 0a 20 20 20 20 20 20 20 20 20 20 27  | equest-extra-headers...........' | 
| 3ac0 |  28 28 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 22    20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f  | (("Content-Type"..."application/ | 
| 3ae0 |  78 2d 77 77 77 2d 66 6f 72 6d 2d 75 72 6c 65 6e    63 6f 64 65 64 22 29 29 29 0a 20 20 20 20 20 20  | x-www-form-urlencoded")))....... | 
| 3b00 |  20 20 20 3b 3b 20 54 4f 44 4f 3a 20 75 73 69 6e    67 20 60 61 69 6f 2d 75 72 6c 2d 72 65 74 72 69  | ...;;.TODO:.using.`aio-url-retri | 
| 3b20 |  65 76 65 27 20 73 6f 6d 65 74 69 6d 65 73 20 72    65 73 75 6c 74 73 20 69 6e 20 61 20 68 75 6e 67  | eve'.sometimes.results.in.a.hung | 
| 3b40 |  0a 20 20 20 20 20 20 20 20 20 3b 3b 20 63 6f 6e    6e 65 63 74 69 6f 6e 2c 20 73 6f 20 77 65 20 66  | ..........;;.connection,.so.we.f | 
| 3b60 |  61 6c 6c 20 62 61 63 6b 20 74 6f 20 e2 80 98 75    72 6c 2d 72 65 74 72 69 65 76 65 2d 73 79 6e 63  | all.back.to....url-retrieve-sync | 
| 3b80 |  68 72 6f 6e 6f 75 73 6c 79 e2 80 99 20 69 6e 73    74 65 61 64 2e 0a 20 20 20 20 20 20 20 20 20 3b  | hronously....instead...........; | 
| 3ba0 |  3b 20 54 68 69 73 20 6d 65 74 68 6f 64 20 73 68    6f 75 6c 64 6e e2 80 99 74 20 62 65 20 63 61 6c  | ;.This.method.shouldn...t.be.cal | 
| 3bc0 |  6c 65 64 20 76 65 72 79 20 6f 66 74 65 6e 2c 20    6f 6e 6c 79 20 77 68 65 6e 20 6f 62 74 61 69 6e  | led.very.often,.only.when.obtain | 
| 3be0 |  69 6e 67 20 74 68 65 0a 20 20 20 20 20 20 20 20    20 3b 3b 20 69 6e 69 74 69 61 6c 20 61 63 63 65  | ing.the..........;;.initial.acce | 
| 3c00 |  73 73 20 74 6f 6b 65 6e 20 61 6e 64 20 77 68 65    6e 20 72 65 66 72 65 73 68 69 6e 67 20 74 6f 6b  | ss.token.and.when.refreshing.tok | 
| 3c20 |  65 6e 73 2c 20 77 68 69 63 68 20 6f 6e 6c 79 20    68 61 70 70 65 6e 73 0a 20 20 20 20 20 20 20 20  | ens,.which.only.happens......... | 
| 3c40 |  20 3b 3b 20 65 76 65 72 79 20 68 6f 75 72 20 6f    72 20 73 6f 2e 20 54 68 65 72 65 66 6f 72 65 20  | .;;.every.hour.or.so..Therefore. | 
| 3c60 |  49 20 74 68 69 6e 6b 20 74 68 69 73 20 69 73 20    61 6e 20 61 63 63 65 70 74 61 62 6c 65 20 77 6f  | I.think.this.is.an.acceptable.wo | 
| 3c80 |  72 6b 61 72 6f 75 6e 64 0a 20 20 20 20 20 20 20    20 20 3b 3b 20 66 6f 72 20 6e 6f 77 2e 0a 20 20  | rkaround..........;;.for.now.... | 
| 3ca0 |  20 20 20 20 20 20 20 28 72 65 73 70 6f 6e 73 65    2d 62 75 66 66 65 72 20 28 61 69 6f 2d 61 77 61  | .......(response-buffer.(aio-awa | 
| 3cc0 |  69 74 20 28 75 72 6c 2d 72 65 74 72 69 65 76 65    2d 73 79 6e 63 68 72 6f 6e 6f 75 73 6c 79 20 75  | it.(url-retrieve-synchronously.u | 
| 3ce0 |  72 6c 29 29 29 0a 20 20 20 20 20 20 20 20 20 28    72 65 73 70 6f 6e 73 65 20 28 77 69 74 68 2d 63  | rl)))..........(response.(with-c | 
| 3d00 |  75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 72 65    73 70 6f 6e 73 65 2d 62 75 66 66 65 72 0a 20 20  | urrent-buffer.response-buffer... | 
| 3d20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 70 72 6f 67 31 20 28 6f 61 75 74 68  | ...................(prog1.(oauth | 
| 3d40 |  32 2d 61 75 74 6f 2d 2d 72 65 71 75 65 73 74 2d    61 63 63 65 73 73 2d 70 61 72 73 65 29 0a 20 20  | 2-auto--request-access-parse)... | 
| 3d60 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 6b 69 6c 6c 2d 62 75 66 66 65  | .....................(kill-buffe | 
| 3d80 |  72 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65    72 29 29 29 29 29 29 0a 20 20 20 20 20 20 28 63  | r.(current-buffer)))))).......(c | 
| 3da0 |  6f 6e 64 0a 20 20 20 20 20 20 20 28 28 61 73 73    6f 63 20 27 65 72 72 6f 72 20 72 65 73 70 6f 6e  | ond........((assoc.'error.respon | 
| 3dc0 |  73 65 29 0a 20 20 20 20 20 20 20 20 28 65 72 72    6f 72 20 22 4f 41 75 74 68 20 65 72 72 6f 72 2e  | se).........(error."OAuth.error. | 
| 3de0 |  20 20 52 65 71 75 65 73 74 3a 20 25 73 2e 20 20    52 65 73 70 6f 6e 73 65 3a 20 25 73 22 0a 20 20  | ..Request:.%s...Response:.%s"... | 
| 3e00 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 70    2d 74 6f 2d 73 74 72 69 6e 67 20 64 61 74 61 2d  | .............(pp-to-string.data- | 
| 3e20 |  61 6c 69 73 74 29 20 28 70 70 2d 74 6f 2d 73 74    72 69 6e 67 20 72 65 73 70 6f 6e 73 65 29 29 29  | alist).(pp-to-string.response))) | 
| 3e40 |  0a 20 20 20 20 20 20 20 28 74 20 72 65 73 70 6f    6e 73 65 29 29 29 29 0a 0a 0a 3b 3b 20 42 61 72  | ........(t.response))))...;;.Bar | 
| 3e60 |  65 62 6f 6e 65 73 20 48 54 54 50 20 73 65 72 76    65 72 20 74 6f 20 72 65 63 65 69 76 65 20 74 68  | ebones.HTTP.server.to.receive.th | 
| 3e80 |  65 20 74 6f 6b 65 6e 73 0a 0a 28 64 65 66 75 6e    20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 68 74  | e.tokens..(defun.oauth2-auto--ht | 
| 3ea0 |  74 70 64 2d 72 65 73 70 6f 6e 64 20 28 70 72 6f    63 65 73 73 20 72 65 73 70 6f 6e 73 65 29 0a 20  | tpd-respond.(process.response).. | 
| 3ec0 |  20 22 53 65 6e 64 20 72 65 73 70 6f 6e 73 65 20    66 6f 72 20 4f 41 75 74 68 32 20 63 68 61 6c 6c  | ."Send.response.for.OAuth2.chall | 
| 3ee0 |  65 6e 67 65 2d 72 65 73 70 6f 6e 73 65 2e 0a 50    52 4f 43 45 53 53 20 69 73 20 74 68 65 20 73 65  | enge-response..PROCESS.is.the.se | 
| 3f00 |  72 76 65 72 20 70 72 6f 63 65 73 73 20 63 72 65    61 74 65 64 20 69 6e 20 e2 80 98 6f 61 75 74 68  | rver.process.created.in....oauth | 
| 3f20 |  32 2d 61 75 74 6f 2d 2d 62 72 6f 77 73 65 72 2d    72 65 71 75 65 73 74 e2 80 99 2e 0a 52 45 53 50  | 2-auto--browser-request.....RESP | 
| 3f40 |  4f 4e 53 45 20 69 73 20 74 68 65 20 48 54 54 50    20 72 65 73 70 6f 6e 73 65 20 62 6f 64 79 20 74  | ONSE.is.the.HTTP.response.body.t | 
| 3f60 |  6f 20 73 65 6e 64 2e 22 0a 20 20 28 70 72 6f 63    65 73 73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 0a  | o.send."...(process-send-string. | 
| 3f80 |  20 20 20 70 72 6f 63 65 73 73 20 28 63 6f 6e 63    61 74 20 22 48 54 54 50 2f 31 2e 30 20 32 30 30  | ...process.(concat."HTTP/1.0.200 | 
| 3fa0 |  20 4f 4b 5c 6e 22 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 22 43 6f 6e 74 65  | .OK\n"...................."Conte | 
| 3fc0 |  6e 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 70 6c    61 69 6e 3b 20 63 68 61 72 73 65 74 3d 75 74 66  | nt-Type:.text/plain;.charset=utf | 
| 3fe0 |  2d 38 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74  | -8\n"....................(format | 
| 4000 |  20 22 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68    3a 20 25 69 5c 6e 5c 6e 22 20 28 6c 65 6e 67 74  | ."Content-Length:.%i\n\n".(lengt | 
| 4020 |  68 20 72 65 73 70 6f 6e 73 65 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | h.response)).................... | 
| 4040 |  72 65 73 70 6f 6e 73 65 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 22 5c 6e 5c  | response...................."\n\ | 
| 4060 |  6e 22 29 29 0a 20 20 28 70 72 6f 63 65 73 73 2d    73 65 6e 64 2d 65 6f 66 20 70 72 6f 63 65 73 73  | n"))...(process-send-eof.process | 
| 4080 |  29 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 6f 61    75 74 68 32 2d 61 75 74 6f 2d 2d 71 75 65 72 79  | ))..(defmacro.oauth2-auto--query | 
| 40a0 |  2d 63 61 73 65 20 28 26 72 65 73 74 20 63 61 73    65 73 29 0a 20 20 22 48 61 6e 64 6c 65 20 48 54  | -case.(&rest.cases)..."Handle.HT | 
| 40c0 |  54 50 20 71 75 65 72 69 65 73 20 62 61 73 65 64    20 6f 6e 20 74 68 65 20 6b 65 79 73 20 70 72 65  | TP.queries.based.on.the.keys.pre | 
| 40e0 |  73 65 6e 74 20 69 6e 20 e2 80 98 71 75 65 72 79    2d 61 6c 69 73 74 e2 80 99 2e 0a e2 80 98 71 75  | sent.in....query-alist........qu | 
| 4100 |  65 72 79 2d 61 6c 69 73 74 e2 80 99 20 69 73 20    61 20 66 72 65 65 20 76 61 72 69 61 62 6c 65 2c  | ery-alist....is.a.free.variable, | 
| 4120 |  20 62 6f 75 6e 64 20 62 79 20 74 68 65 20 63 61    6c 6c 65 72 20 6f 66 20 74 68 69 73 20 6d 61 63  | .bound.by.the.caller.of.this.mac | 
| 4140 |  72 6f 2e 20 20 45 61 63 68 0a 65 6c 65 6d 65 6e    74 20 6f 66 20 43 41 53 45 53 20 68 61 73 20 74  | ro...Each.element.of.CASES.has.t | 
| 4160 |  68 65 20 66 6f 72 6d 61 74 20 e2 80 98 28 73 79    6d 62 6f 6c 73 20 6d 73 67 20 62 6f 64 79 29 27  | he.format....(symbols.msg.body)' | 
| 4180 |  2e 20 20 46 6f 72 20 65 61 63 68 20 65 6c 65 6d    65 6e 74 20 6f 66 0a 43 41 53 45 53 3a 0a 0a 2d  | ...For.each.element.of.CASES:..- | 
| 41a0 |  20 e2 80 98 73 79 6d 62 6f 6c 73 27 20 69 73 20    61 20 6c 69 73 74 20 6f 66 20 61 74 20 6c 65 61  | ....symbols'.is.a.list.of.at.lea | 
| 41c0 |  73 74 20 6f 6e 65 20 73 79 6d 62 6f 6c 2c 20 77    68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6b  | st.one.symbol,.which.should.be.k | 
| 41e0 |  65 79 73 20 69 6e 0a 20 20 e2 80 98 71 75 65 72    79 2d 61 6c 69 73 74 e2 80 99 2e 0a 2d 20 45 78  | eys.in......query-alist.....-.Ex | 
| 4200 |  74 72 61 63 74 20 61 6e 64 20 62 69 6e 64 20 6b    65 79 73 20 60 73 79 6d 62 6f 6c 73 27 20 66 72  | tract.and.bind.keys.`symbols'.fr | 
| 4220 |  6f 6d 20 60 71 75 65 72 79 2d 61 6c 69 73 74 27    2e 0a 2d 20 49 66 20 61 6c 6c 20 6f 66 20 74 68  | om.`query-alist'..-.If.all.of.th | 
| 4240 |  65 6d 20 61 72 65 20 70 72 65 73 65 6e 74 2c 20    72 65 73 70 6f 6e 64 20 77 69 74 68 20 60 6d 73  | em.are.present,.respond.with.`ms | 
| 4260 |  67 27 20 61 6e 64 20 72 75 6e 73 20 60 62 6f 64    79 27 2e 0a 0a 46 6f 72 20 65 78 61 6d 70 6c 65  | g'.and.runs.`body'...For.example | 
| 4280 |  20 6f 66 20 75 73 61 67 65 20 73 65 65 20 e2 80    98 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 68 74  | .of.usage.see....oauth2-auto--ht | 
| 42a0 |  74 70 64 2d 66 69 6c 74 65 72 e2 80 99 2e 22 0a    20 20 28 64 65 63 6c 61 72 65 0a 20 20 20 28 64  | tpd-filter...."...(declare....(d | 
| 42c0 |  65 62 75 67 20 28 26 72 65 73 74 20 28 28 73 79    6d 62 6f 6c 70 20 26 72 65 73 74 20 73 79 6d 62  | ebug.(&rest.((symbolp.&rest.symb | 
| 42e0 |  6f 6c 70 29 20 66 6f 72 6d 20 26 72 65 73 74 20    66 6f 72 6d 29 29 29 29 0a 20 20 60 28 63 6f 6e  | olp).form.&rest.form))))...`(con | 
| 4300 |  64 0a 20 20 20 20 2c 40 28 6d 61 70 63 61 72 20    28 6c 61 6d 62 64 61 20 28 63 61 73 65 29 0a 20  | d.....,@(mapcar.(lambda.(case).. | 
| 4320 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    6c 65 74 20 28 28 73 79 6d 62 6f 6c 73 20 28 63  | ...............(let.((symbols.(c | 
| 4340 |  61 72 20 63 61 73 65 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ar.case))....................... | 
| 4360 |  28 6d 73 67 20 28 63 61 64 72 20 63 61 73 65 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | (msg.(cadr.case))............... | 
| 4380 |  20 20 20 20 20 20 20 20 28 62 6f 64 79 20 28 63    64 64 72 20 63 61 73 65 29 29 29 0a 20 20 20 20  | ........(body.(cddr.case)))..... | 
| 43a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 60 28    28 61 6e 64 20 2c 40 28 2d 2d 6d 61 70 20 60 28  | ..............`((and.,@(--map.`( | 
| 43c0 |  63 64 72 20 28 61 73 73 6f 63 20 27 2c 69 74 20    71 75 65 72 79 2d 61 6c 69 73 74 29 29 20 73 79  | cdr.(assoc.',it.query-alist)).sy | 
| 43e0 |  6d 62 6f 6c 73 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74  | mbols)).....................(let | 
| 4400 |  2a 20 28 2c 40 28 2d 2d 6d 61 70 20 60 28 2c 69    74 20 28 63 64 72 20 28 61 73 73 6f 63 20 27 2c  | *.(,@(--map.`(,it.(cdr.(assoc.', | 
| 4420 |  69 74 20 71 75 65 72 79 2d 61 6c 69 73 74 29 29    29 20 73 79 6d 62 6f 6c 73 29 0a 20 20 20 20 20  | it.query-alist))).symbols)...... | 
| 4440 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 6d 73 67 20 2c 6d 73 67 29  | ......................(msg.,msg) | 
| 4460 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 3b 3b 20 e2 80 98 69 67  | ).......................;;....ig | 
| 4480 |  6e 6f 72 65 e2 80 99 20 73 75 70 70 72 65 73 73    65 73 20 62 79 74 65 20 63 6f 6d 70 69 6c 65 72  | nore....suppresses.byte.compiler | 
| 44a0 |  20 77 61 72 6e 69 6e 67 73 20 69 66 20 74 68 65    20 6d 61 63 72 6f 0a 20 20 20 20 20 20 20 20 20  | .warnings.if.the.macro.......... | 
| 44c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20    63 61 6c 6c 65 72 20 64 6f 65 73 6e e2 80 99 74  | .............;;.caller.doesn...t | 
| 44e0 |  20 75 73 65 20 74 68 65 20 76 61 72 69 61 62 6c    65 73 20 64 65 63 6c 61 72 65 64 20 69 6e 20 74  | .use.the.variables.declared.in.t | 
| 4500 |  68 65 20 e2 80 98 6c 65 74 2a e2 80 99 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | he....let*...................... | 
| 4520 |  20 20 20 20 3b 3b 20 61 62 6f 76 65 2e 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | ....;;.above.................... | 
| 4540 |  20 20 20 20 28 69 67 6e 6f 72 65 20 6d 73 67 20    2c 40 73 79 6d 62 6f 6c 73 29 0a 20 20 20 20 20  | ....(ignore.msg.,@symbols)...... | 
| 4560 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 68  | .................(oauth2-auto--h | 
| 4580 |  74 74 70 64 2d 72 65 73 70 6f 6e 64 20 70 72 6f    63 65 73 73 20 6d 73 67 29 0a 20 20 20 20 20 20  | ttpd-respond.process.msg)....... | 
| 45a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    2c 40 62 6f 64 79 29 29 29 29 0a 20 20 20 20 20  | ................,@body))))...... | 
| 45c0 |  20 20 20 20 20 20 20 20 20 63 61 73 65 73 29 29    29 0a 0a 28 64 65 66 75 6e 20 6f 61 75 74 68 32  | .........cases)))..(defun.oauth2 | 
| 45e0 |  2d 61 75 74 6f 2d 2d 68 74 74 70 64 2d 66 69 6c    74 65 72 20 28 70 72 6f 63 65 73 73 20 69 6e 70  | -auto--httpd-filter.(process.inp | 
| 4600 |  75 74 29 0a 20 20 22 54 68 65 20 48 54 54 50 20    68 61 6e 64 6c 65 72 20 66 6f 72 20 74 68 65 20  | ut)..."The.HTTP.handler.for.the. | 
| 4620 |  4f 41 75 74 68 32 20 63 68 61 6c 6c 65 6e 67 65    2d 72 65 73 70 6f 6e 73 65 20 73 65 72 76 65 72  | OAuth2.challenge-response.server | 
| 4640 |  2e 0a 50 52 4f 43 45 53 53 20 69 73 20 74 68 65    20 73 65 72 76 65 72 20 70 72 6f 63 65 73 73 20  | ..PROCESS.is.the.server.process. | 
| 4660 |  63 72 65 61 74 65 64 20 69 6e 20 e2 80 98 6f 61    75 74 68 32 2d 61 75 74 6f 2d 2d 62 72 6f 77 73  | created.in....oauth2-auto--brows | 
| 4680 |  65 72 2d 72 65 71 75 65 73 74 e2 80 99 2e 0a 49    4e 50 55 54 20 69 73 20 74 68 65 20 72 61 77 20  | er-request.....INPUT.is.the.raw. | 
| 46a0 |  48 54 54 50 20 72 65 71 75 65 73 74 2e 22 0a 20    20 28 6c 65 74 20 28 28 71 75 65 72 79 2d 61 6c  | HTTP.request."...(let.((query-al | 
| 46c0 |  69 73 74 0a 20 20 20 20 20 20 20 20 20 28 77 69    74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20  | ist..........(with-temp-buffer.. | 
| 46e0 |  20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72    74 20 69 6e 70 75 74 29 0a 20 20 20 20 20 20 20  | ..........(insert.input)........ | 
| 4700 |  20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28    70 6f 69 6e 74 2d 6d 69 6e 29 29 0a 20 20 20 20  | ....(goto-char.(point-min))..... | 
| 4720 |  20 20 20 20 20 20 20 28 72 65 2d 73 65 61 72 63    68 2d 66 6f 72 77 61 72 64 0a 20 20 20 20 20 20  | .......(re-search-forward....... | 
| 4740 |  20 20 20 20 20 20 22 5e 5b 5b 3a 73 70 61 63 65    3a 5d 5d 2a 47 45 54 5b 5b 3a 73 70 61 63 65 3a  | ......"^[[:space:]]*GET[[:space: | 
| 4760 |  5d 5d 2b 5b 2f 3f 5d 2b 5c 5c 28 5b 5b 3a 67 72    61 70 68 3a 5d 5d 2a 5c 5c 29 5b 5b 3a 73 70 61  | ]]+[/?]+\\([[:graph:]]*\\)[[:spa | 
| 4780 |  63 65 3a 5d 5d 2b 48 54 54 50 2f 5b 30 2d 39 2e    5d 2b 5b 5b 3a 73 70 61 63 65 3a 5d 5d 2a 24 22  | ce:]]+HTTP/[0-9.]+[[:space:]]*$" | 
| 47a0 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 28 6d 61    70 63 61 72 0a 20 20 20 20 20 20 20 20 20 20 20  | )............(mapcar............ | 
| 47c0 |  20 28 6c 61 6d 62 64 61 20 28 69 74 29 20 28 63    6f 6e 73 20 28 69 6e 74 65 72 6e 20 28 63 61 72  | .(lambda.(it).(cons.(intern.(car | 
| 47e0 |  20 69 74 29 29 20 28 63 61 64 72 20 69 74 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 75  | .it)).(cadr.it))).............(u | 
| 4800 |  72 6c 2d 70 61 72 73 65 2d 71 75 65 72 79 2d 73    74 72 69 6e 67 20 28 6d 61 74 63 68 2d 73 74 72  | rl-parse-query-string.(match-str | 
| 4820 |  69 6e 67 20 31 29 29 29 29 29 29 0a 20 20 20 20    28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 71 75  | ing.1)))))).....(oauth2-auto--qu | 
| 4840 |  65 72 79 2d 63 61 73 65 0a 20 20 20 20 20 28 28    65 72 72 6f 72 20 65 72 72 6f 72 5f 64 65 73 63  | ery-case......((error.error_desc | 
| 4860 |  72 69 70 74 69 6f 6e 29 0a 20 20 20 20 20 20 28    66 6f 72 6d 61 74 20 22 45 72 72 6f 72 20 25 73  | ription).......(format."Error.%s | 
| 4880 |  3a 20 25 73 22 20 65 72 72 6f 72 20 65 72 72 6f    72 5f 64 65 73 63 72 69 70 74 69 6f 6e 29 0a 20  | :.%s".error.error_description).. | 
| 48a0 |  20 20 20 20 20 28 65 72 72 6f 72 20 6d 73 67 29    0a 20 20 20 20 20 20 6e 69 6c 29 0a 20 20 20 20  | .....(error.msg).......nil)..... | 
| 48c0 |  20 28 28 63 6f 64 65 20 73 74 61 74 65 29 0a 20    20 20 20 20 20 22 41 75 74 68 65 6e 74 69 63 61  | .((code.state)......."Authentica | 
| 48e0 |  74 69 6f 6e 20 74 6f 6b 65 6e 20 73 75 63 63 65    73 73 66 75 6c 6c 79 20 6f 62 74 61 69 6e 65 64  | tion.token.successfully.obtained | 
| 4900 |  20 62 79 20 45 6d 61 63 73 21 20 59 6f 75 20 6d    61 79 20 63 6c 6f 73 65 20 74 68 69 73 20 70 61  | .by.Emacs!.You.may.close.this.pa | 
| 4920 |  67 65 20 6e 6f 77 2e 22 0a 20 20 20 20 20 20 71    75 65 72 79 2d 61 6c 69 73 74 29 0a 20 20 20 20  | ge.now.".......query-alist)..... | 
| 4940 |  20 28 28 66 61 76 69 63 6f 6e 2e 69 63 6f 29 0a    20 20 20 20 20 20 22 22 0a 20 20 20 20 20 20 6e  | .((favicon.ico)......."".......n | 
| 4960 |  69 6c 29 20 20 3b 20 6a 75 73 74 20 72 65 74 75    72 6e 20 65 6d 70 74 79 20 6c 69 73 74 20 69 66  | il)..;.just.return.empty.list.if | 
| 4980 |  20 66 61 76 69 63 6f 6e 2e 69 63 6f 20 69 73 20    72 65 71 75 65 73 74 65 64 0a 20 20 20 20 20 28  | .favicon.ico.is.requested......( | 
| 49a0 |  28 29 0a 20 20 20 20 20 20 28 66 6f 72 6d 61 74    20 22 43 6f 75 6c 64 20 6e 6f 74 20 70 61 72 73  | ().......(format."Could.not.pars | 
| 49c0 |  65 20 71 75 65 72 79 20 73 74 72 69 6e 67 20 25    73 22 20 28 70 70 2d 74 6f 2d 73 74 72 69 6e 67  | e.query.string.%s".(pp-to-string | 
| 49e0 |  20 71 75 65 72 79 2d 61 6c 69 73 74 29 29 0a 20    20 20 20 20 20 28 65 72 72 6f 72 20 6d 73 67 29  | .query-alist)).......(error.msg) | 
| 4a00 |  0a 20 20 20 20 20 20 6e 69 6c 29 29 29 29 0a 0a    28 61 69 6f 2d 64 65 66 75 6e 20 6f 61 75 74 68  | .......nil))))..(aio-defun.oauth | 
| 4a20 |  32 2d 61 75 74 6f 2d 2d 62 72 6f 77 73 65 72 2d    72 65 71 75 65 73 74 20 28 70 72 6f 76 69 64 65  | 2-auto--browser-request.(provide | 
| 4a40 |  72 20 75 72 6c 2d 6b 65 79 20 64 61 74 61 2d 6b    65 79 73 20 65 78 74 72 61 2d 61 6c 69 73 74 20  | r.url-key.data-keys.extra-alist. | 
| 4a60 |  26 6f 70 74 69 6f 6e 61 6c 20 71 75 69 65 74 29    0a 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20  | &optional.quiet)............(if. | 
| 4a80 |  6f 61 75 74 68 32 2d 61 75 74 6f 2d 6d 61 6e 75    61 6c 6c 79 2d 61 75 74 68 0a 20 20 20 20 20 20  | oauth2-auto-manually-auth....... | 
| 4aa0 |  20 20 20 20 20 20 20 20 20 28 61 69 6f 2d 61 77    61 69 74 20 28 6f 61 75 74 68 32 2d 61 75 74 6f  | .........(aio-await.(oauth2-auto | 
| 4ac0 |  2d 2d 62 72 6f 77 73 65 72 2d 72 65 71 75 65 73    74 2d 6d 61 6e 75 61 6c 6c 79 20 70 72 6f 76 69  | --browser-request-manually.provi | 
| 4ae0 |  64 65 72 20 75 72 6c 2d 6b 65 79 20 64 61 74 61    2d 6b 65 79 73 20 65 78 74 72 61 2d 61 6c 69 73  | der.url-key.data-keys.extra-alis | 
| 4b00 |  74 20 71 75 69 65 74 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 28 61 69 6f 2d 61 77 61 69  | t.quiet))..............(aio-awai | 
| 4b20 |  74 20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d    62 72 6f 77 73 65 72 2d 72 65 71 75 65 73 74 2d  | t.(oauth2-auto--browser-request- | 
| 4b40 |  61 75 74 6f 20 70 72 6f 76 69 64 65 72 20 75 72    6c 2d 6b 65 79 20 64 61 74 61 2d 6b 65 79 73 20  | auto.provider.url-key.data-keys. | 
| 4b60 |  65 78 74 72 61 2d 61 6c 69 73 74 20 71 75 69 65    74 29 29 29 29 0a 0a 0a 28 61 69 6f 2d 64 65 66  | extra-alist.quiet))))...(aio-def | 
| 4b80 |  75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d    62 72 6f 77 73 65 72 2d 72 65 71 75 65 73 74 2d  | un.oauth2-auto--browser-request- | 
| 4ba0 |  61 75 74 6f 20 28 70 72 6f 76 69 64 65 72 20 75    72 6c 2d 6b 65 79 20 64 61 74 61 2d 6b 65 79 73  | auto.(provider.url-key.data-keys | 
| 4bc0 |  20 65 78 74 72 61 2d 61 6c 69 73 74 20 26 6f 70    74 69 6f 6e 61 6c 20 71 75 69 65 74 29 0a 20 20  | .extra-alist.&optional.quiet)... | 
| 4be0 |  22 4f 70 65 6e 20 62 72 6f 77 73 65 72 20 66 6f    72 20 74 68 65 20 4f 41 75 74 68 32 20 50 52 4f  | "Open.browser.for.the.OAuth2.PRO | 
| 4c00 |  56 49 44 45 52 2e 0a 42 72 6f 77 73 65 72 20 69    73 20 6f 70 65 6e 65 64 20 61 74 20 75 72 6c 20  | VIDER..Browser.is.opened.at.url. | 
| 4c20 |  61 6e 64 20 70 61 72 61 6d 65 74 65 72 73 20 67    69 76 65 6e 20 62 79 20 74 61 6b 69 6e 67 20 55  | and.parameters.given.by.taking.U | 
| 4c40 |  52 4c 2d 4b 45 59 20 61 6e 64 20 44 41 54 41 2d    4b 45 59 53 0a 66 72 6f 6d 20 74 68 65 20 64 61  | RL-KEY.and.DATA-KEYS.from.the.da | 
| 4c60 |  74 61 20 6f 66 20 74 68 65 20 50 52 4f 56 49 44    45 52 2c 20 61 6e 64 20 61 64 64 69 6e 67 20 45  | ta.of.the.PROVIDER,.and.adding.E | 
| 4c80 |  58 54 52 41 2d 41 4c 49 53 54 2e 20 20 54 68 65    6e 20 77 65 20 6c 69 73 74 65 6e 20 74 6f 20 74  | XTRA-ALIST...Then.we.listen.to.t | 
| 4ca0 |  68 65 0a 72 65 64 69 72 65 63 74 20 72 65 73 70    6f 6e 73 65 20 61 6e 64 20 72 65 74 75 72 6e 20  | he.redirect.response.and.return. | 
| 4cc0 |  69 74 2e 0a 0a 49 66 20 51 55 49 45 54 20 69 73    20 6e 6f 6e 2d 6e 69 6c 2c 20 73 75 70 70 72 65  | it...If.QUIET.is.non-nil,.suppre | 
| 4ce0 |  73 73 20 61 6c 65 72 74 73 2e 22 0a 20 20 28 6c    65 74 2a 20 28 3b 20 46 69 72 73 74 20 6f 70 65  | ss.alerts."...(let*.(;.First.ope | 
| 4d00 |  6e 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 73 6f    6d 65 20 70 6f 72 74 20 69 6e 20 6c 6f 63 61 6c  | n.listener.to.some.port.in.local | 
| 4d20 |  68 6f 73 74 0a 20 20 20 20 20 20 20 20 20 28 73    65 72 76 65 72 2d 70 72 6f 63 2d 66 69 6c 74 65  | host..........(server-proc-filte | 
| 4d40 |  72 20 28 61 69 6f 2d 6d 61 6b 65 2d 63 61 6c 6c    62 61 63 6b 29 29 0a 20 20 20 20 20 20 20 20 20  | r.(aio-make-callback)).......... | 
| 4d60 |  28 73 65 72 76 65 72 2d 70 72 6f 63 20 28 6d 61    6b 65 2d 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65  | (server-proc.(make-network-proce | 
| 4d80 |  73 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 3a 6e 61 6d 65 20  | ss........................:name. | 
| 4da0 |  20 20 20 22 6f 61 75 74 68 32 2d 61 75 74 6f 2d    2d 68 74 74 70 64 22 0a 20 20 20 20 20 20 20 20  | ..."oauth2-auto--httpd"......... | 
| 4dc0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a    73 65 72 76 69 63 65 20 74 0a 20 20 20 20 20 20  | ...............:service.t....... | 
| 4de0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 3a 73 65 72 76 65 72 20 20 74 0a 20 20 20 20  | .................:server..t..... | 
| 4e00 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 3a 68 6f 73 74 20 20 20 20 27 6c 6f 63  | ...................:host....'loc | 
| 4e20 |  61 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 3a 66 61 6d 69 6c  | al........................:famil | 
| 4e40 |  79 20 20 27 69 70 76 34 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | y..'ipv4........................ | 
| 4e60 |  3a 66 69 6c 74 65 72 20 20 28 63 61 72 20 73 65    72 76 65 72 2d 70 72 6f 63 2d 66 69 6c 74 65 72  | :filter..(car.server-proc-filter | 
| 4e80 |  29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 3a 63 6f 64 69 6e 67  | )........................:coding | 
| 4ea0 |  20 20 27 62 69 6e 61 72 79 29 29 29 0a 20 20 20    20 28 75 6e 77 69 6e 64 2d 70 72 6f 74 65 63 74  | ..'binary))).....(unwind-protect | 
| 4ec0 |  0a 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28    28 73 65 72 76 65 72 2d 70 72 6f 6d 69 73 65 20  | .........(let*.((server-promise. | 
| 4ee0 |  28 63 64 72 20 73 65 72 76 65 72 2d 70 72 6f 63    2d 66 69 6c 74 65 72 29 29 0a 20 20 20 20 20 20  | (cdr.server-proc-filter))....... | 
| 4f00 |  20 20 20 20 20 20 20 20 20 28 73 65 72 76 65 72    2d 75 72 6c 20 28 66 6f 72 6d 61 74 20 22 68 74  | .........(server-url.(format."ht | 
| 4f20 |  74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 25    69 2f 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  | tp://localhost:%i/"............. | 
| 4f40 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 63 61 64 72 20 28 70 72  | .......................(cadr.(pr | 
| 4f60 |  6f 63 65 73 73 2d 63 6f 6e 74 61 63 74 20 73 65    72 76 65 72 2d 70 72 6f 63 29 29 29 29 0a 20 20  | ocess-contact.server-proc))))... | 
| 4f80 |  20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65    64 69 72 65 63 74 2d 75 72 69 2d 65 6c 74 20 28  | .............(redirect-uri-elt.( | 
| 4fa0 |  63 6f 6e 73 20 27 72 65 64 69 72 65 63 74 5f 75    72 69 20 73 65 72 76 65 72 2d 75 72 6c 29 29 0a  | cons.'redirect_uri.server-url)). | 
| 4fc0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    3b 20 43 72 61 66 74 20 61 20 72 65 71 75 65 73  | ................;.Craft.a.reques | 
| 4fe0 |  74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 76 65 72 79 2d 65 78 74 72 61 2d 61 6c 69  | t................(very-extra-ali | 
| 5000 |  73 74 20 28 63 6f 6e 73 20 72 65 64 69 72 65 63    74 2d 75 72 69 2d 65 6c 74 20 65 78 74 72 61 2d  | st.(cons.redirect-uri-elt.extra- | 
| 5020 |  61 6c 69 73 74 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 3b 3b 20 28 76 65 72 79 2d  | alist))................;;.(very- | 
| 5040 |  65 78 74 72 61 2d 61 6c 69 73 74 20 65 78 74 72    61 2d 61 6c 69 73 74 29 0a 20 20 20 20 20 20 20  | extra-alist.extra-alist)........ | 
| 5060 |  20 20 20 20 20 20 20 20 3b 3b 20 61 6c 6d 6f 73    74 20 73 61 6d 65 20 63 6f 64 65 20 61 73 20 62  | ........;;.almost.same.code.as.b | 
| 5080 |  65 67 69 6e 6e 69 6e 67 20 6f 66 20 60 6f 61 75    74 68 32 2d 61 75 74 6f 2d 2d 72 65 71 75 65 73  | eginning.of.`oauth2-auto--reques | 
| 50a0 |  74 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 70 72 6f 76 69 64 65 72 2d 69 6e 66 6f  | t'................(provider-info | 
| 50c0 |  20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 70    72 6f 76 69 64 65 72 2d 69 6e 66 6f 20 70 72 6f  | .(oauth2-auto--provider-info.pro | 
| 50e0 |  76 69 64 65 72 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 64 61 74 61 2d 61 6c 69  | vider))................(data-ali | 
| 5100 |  73 74 20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d    2d 63 72 61 66 74 2d 72 65 71 75 65 73 74 2d 61  | st.(oauth2-auto--craft-request-a | 
| 5120 |  6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | list............................ | 
| 5140 |  20 70 72 6f 76 69 64 65 72 2d 69 6e 66 6f 20 64    61 74 61 2d 6b 65 79 73 20 76 65 72 79 2d 65 78  | .provider-info.data-keys.very-ex | 
| 5160 |  74 72 61 2d 61 6c 69 73 74 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 64 61 74 61  | tra-alist))................(data | 
| 5180 |  20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 75    72 6c 69 66 79 2d 72 65 71 75 65 73 74 20 64 61  | .(oauth2-auto--urlify-request.da | 
| 51a0 |  74 61 2d 61 6c 69 73 74 29 29 0a 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 75 72 6c 20  | ta-alist)).................(url. | 
| 51c0 |  28 63 64 72 20 28 61 73 73 6f 63 20 75 72 6c 2d    6b 65 79 20 70 72 6f 76 69 64 65 72 2d 69 6e 66  | (cdr.(assoc.url-key.provider-inf | 
| 51e0 |  6f 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 3b 20 6f 70 65 6e 20 61 75 74 68 6f  | o)))................;.open.autho | 
| 5200 |  72 69 7a 61 74 69 6f 6e 20 55 52 4c 20 69 6e 20    62 72 6f 77 73 65 72 0a 20 20 20 20 20 20 20 20  | rization.URL.in.browser......... | 
| 5220 |  20 20 20 20 20 20 20 28 72 65 73 70 6f 6e 73 65    2d 61 6c 69 73 74 20 6e 69 6c 29 29 0a 20 20 20  | .......(response-alist.nil)).... | 
| 5240 |  20 20 20 20 20 20 20 28 62 72 6f 77 73 65 2d 75    72 6c 20 28 63 6f 6e 63 61 74 20 75 72 6c 20 22  | .......(browse-url.(concat.url." | 
| 5260 |  3f 22 20 64 61 74 61 29 29 0a 0a 20 20 20 20 20    20 20 20 20 20 28 75 6e 6c 65 73 73 20 71 75 69  | ?".data))............(unless.qui | 
| 5280 |  65 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 28    61 6c 65 72 74 20 22 4c 6f 67 20 69 6e 20 74 6f  | et.............(alert."Log.in.to | 
| 52a0 |  20 79 6f 75 72 20 61 63 63 6f 75 6e 74 20 66 6f    72 20 45 6d 61 63 73 20 69 6e 20 79 6f 75 72 20  | .your.account.for.Emacs.in.your. | 
| 52c0 |  62 72 6f 77 73 65 72 20 77 69 6e 64 6f 77 22 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | browser.window"................. | 
| 52e0 |  20 20 20 3a 74 69 74 6c 65 20 22 45 6d 61 63 73    20 4f 41 75 74 68 32 20 6c 6f 67 69 6e 22 0a 20  | ...:title."Emacs.OAuth2.login".. | 
| 5300 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 3a 63 61 74 65 67 6f 72 79 20 27 6f 61 75  | ..................:category.'oau | 
| 5320 |  74 68 32 2d 61 75 74 6f 29 29 0a 20 20 20 20 20    20 20 20 20 20 3b 20 57 61 69 74 20 75 6e 74 69  | th2-auto))...........;.Wait.unti | 
| 5340 |  6c 20 77 65 20 67 65 74 20 61 20 72 65 70 6c 79    20 63 6f 6e 74 61 69 6e 69 6e 67 20 27 63 6f 64  | l.we.get.a.reply.containing.'cod | 
| 5360 |  65 20 61 6e 64 20 27 73 74 61 74 65 2e 0a 20 20    20 20 20 20 20 20 20 20 28 77 68 69 6c 65 20 28  | e.and.'state............(while.( | 
| 5380 |  6e 6f 74 20 72 65 73 70 6f 6e 73 65 2d 61 6c 69    73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  | not.response-alist)............. | 
| 53a0 |  28 73 65 74 71 20 72 65 73 70 6f 6e 73 65 2d 61    6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20  | (setq.response-alist............ | 
| 53c0 |  20 20 20 20 20 20 20 28 61 70 70 6c 79 20 23 27    6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 68 74 74  | .......(apply.#'oauth2-auto--htt | 
| 53e0 |  70 64 2d 66 69 6c 74 65 72 20 28 61 69 6f 2d 63    68 61 69 6e 20 73 65 72 76 65 72 2d 70 72 6f 6d  | pd-filter.(aio-chain.server-prom | 
| 5400 |  69 73 65 29 29 29 29 0a 0a 20 20 20 20 20 20 20    20 20 20 3b 20 72 65 74 75 72 6e 20 74 68 65 20  | ise))))............;.return.the. | 
| 5420 |  72 65 73 70 6f 6e 73 65 2c 20 77 69 74 68 20 74    68 65 20 27 72 65 64 69 72 65 63 74 5f 75 72 69  | response,.with.the.'redirect_uri | 
| 5440 |  0a 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73    20 72 65 64 69 72 65 63 74 2d 75 72 69 2d 65 6c  | ...........(cons.redirect-uri-el | 
| 5460 |  74 20 72 65 73 70 6f 6e 73 65 2d 61 6c 69 73 74    29 29 0a 20 20 20 20 20 20 3b 20 41 6c 77 61 79  | t.response-alist)).......;.Alway | 
| 5480 |  73 20 6b 69 6c 6c 20 73 65 72 76 65 72 2d 70 72    6f 63 0a 20 20 20 20 20 20 28 64 65 6c 65 74 65  | s.kill.server-proc.......(delete | 
| 54a0 |  2d 70 72 6f 63 65 73 73 20 73 65 72 76 65 72 2d    70 72 6f 63 29 29 29 29 0a 0a 28 61 69 6f 2d 64  | -process.server-proc))))..(aio-d | 
| 54c0 |  65 66 75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f    2d 2d 62 72 6f 77 73 65 72 2d 72 65 71 75 65 73  | efun.oauth2-auto--browser-reques | 
| 54e0 |  74 2d 6d 61 6e 75 61 6c 6c 79 20 28 70 72 6f 76    69 64 65 72 20 75 72 6c 2d 6b 65 79 20 64 61 74  | t-manually.(provider.url-key.dat | 
| 5500 |  61 2d 6b 65 79 73 20 65 78 74 72 61 2d 61 6c 69    73 74 20 26 6f 70 74 69 6f 6e 61 6c 20 71 75 69  | a-keys.extra-alist.&optional.qui | 
| 5520 |  65 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 22    4f 70 65 6e 20 62 72 6f 77 73 65 72 20 66 6f 72  | et)............"Open.browser.for | 
| 5540 |  20 74 68 65 20 4f 41 75 74 68 32 20 50 52 4f 56    49 44 45 52 2e 0a 49 6e 73 74 65 61 64 20 6f 66  | .the.OAuth2.PROVIDER..Instead.of | 
| 5560 |  20 6f 70 65 6e 69 6e 67 20 62 72 6f 77 73 65 72    2c 20 64 69 73 70 6c 61 79 20 74 68 65 20 61 75  | .opening.browser,.display.the.au | 
| 5580 |  74 68 6f 72 69 7a 61 74 69 6f 6e 20 55 52 4c 20    61 6e 64 20 77 61 69 74 20 66 6f 72 20 75 73 65  | thorization.URL.and.wait.for.use | 
| 55a0 |  72 20 74 6f 20 69 6e 70 75 74 20 74 68 65 20 63    6f 64 65 2e 0a 42 72 6f 77 73 65 72 20 55 52 4c  | r.to.input.the.code..Browser.URL | 
| 55c0 |  20 69 73 20 63 6f 6e 73 74 72 75 63 74 65 64 20    66 72 6f 6d 20 75 72 6c 20 61 6e 64 20 70 61 72  | .is.constructed.from.url.and.par | 
| 55e0 |  61 6d 65 74 65 72 73 20 67 69 76 65 6e 20 62 79    20 74 61 6b 69 6e 67 20 55 52 4c 2d 4b 45 59 20  | ameters.given.by.taking.URL-KEY. | 
| 5600 |  61 6e 64 20 44 41 54 41 2d 4b 45 59 53 0a 66 72    6f 6d 20 74 68 65 20 64 61 74 61 20 6f 66 20 74  | and.DATA-KEYS.from.the.data.of.t | 
| 5620 |  68 65 20 50 52 4f 56 49 44 45 52 2c 20 61 6e 64    20 61 64 64 69 6e 67 20 45 58 54 52 41 2d 41 4c  | he.PROVIDER,.and.adding.EXTRA-AL | 
| 5640 |  49 53 54 2e 0a 0a 49 66 20 51 55 49 45 54 20 69    73 20 6e 6f 6e 2d 6e 69 6c 2c 20 73 75 70 70 72  | IST...If.QUIET.is.non-nil,.suppr | 
| 5660 |  65 73 73 20 61 6c 65 72 74 73 2e 22 0a 20 20 20    20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28  | ess.alerts."............(let*.(( | 
| 5680 |  72 65 64 69 72 65 63 74 2d 75 72 69 20 22 68 74    74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 38  | redirect-uri."http://localhost:8 | 
| 56a0 |  30 38 30 22 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 72 65 64 69 72 65 63  | 080")...................(redirec | 
| 56c0 |  74 2d 75 72 69 2d 65 6c 74 20 28 63 6f 6e 73 20    27 72 65 64 69 72 65 63 74 5f 75 72 69 20 72 65  | t-uri-elt.(cons.'redirect_uri.re | 
| 56e0 |  64 69 72 65 63 74 2d 75 72 69 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | direct-uri))...................( | 
| 5700 |  76 65 72 79 2d 65 78 74 72 61 2d 61 6c 69 73 74    20 28 63 6f 6e 73 20 72 65 64 69 72 65 63 74 2d  | very-extra-alist.(cons.redirect- | 
| 5720 |  75 72 69 2d 65 6c 74 20 65 78 74 72 61 2d 61 6c    69 73 74 29 29 0a 20 20 20 20 20 20 20 20 20 20  | uri-elt.extra-alist))........... | 
| 5740 |  20 20 20 20 20 20 20 20 28 70 72 6f 76 69 64 65    72 2d 69 6e 66 6f 20 28 6f 61 75 74 68 32 2d 61  | ........(provider-info.(oauth2-a | 
| 5760 |  75 74 6f 2d 2d 70 72 6f 76 69 64 65 72 2d 69 6e    66 6f 20 70 72 6f 76 69 64 65 72 29 29 0a 20 20  | uto--provider-info.provider))... | 
| 5780 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 64 61 74 61 2d 61 6c 69 73 74 20 28 6f 61 75  | ................(data-alist.(oau | 
| 57a0 |  74 68 32 2d 61 75 74 6f 2d 2d 63 72 61 66 74 2d    72 65 71 75 65 73 74 2d 61 6c 69 73 74 0a 20 20  | th2-auto--craft-request-alist... | 
| 57c0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f  | .............................pro | 
| 57e0 |  76 69 64 65 72 2d 69 6e 66 6f 20 64 61 74 61 2d    6b 65 79 73 20 76 65 72 79 2d 65 78 74 72 61 2d  | vider-info.data-keys.very-extra- | 
| 5800 |  61 6c 69 73 74 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 64 61 74 61 20  | alist))...................(data. | 
| 5820 |  28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 75 72    6c 69 66 79 2d 72 65 71 75 65 73 74 20 64 61 74  | (oauth2-auto--urlify-request.dat | 
| 5840 |  61 2d 61 6c 69 73 74 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 75 72 6c  | a-alist))...................(url | 
| 5860 |  20 28 63 64 72 20 28 61 73 73 6f 63 20 75 72 6c    2d 6b 65 79 20 70 72 6f 76 69 64 65 72 2d 69 6e  | .(cdr.(assoc.url-key.provider-in | 
| 5880 |  66 6f 29 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 61 75 74 68 2d 75 72  | fo)))...................(auth-ur | 
| 58a0 |  6c 20 28 63 6f 6e 63 61 74 20 75 72 6c 20 22 3f    22 20 64 61 74 61 29 29 29 0a 0a 20 20 20 20 20  | l.(concat.url."?".data)))....... | 
| 58c0 |  20 20 20 20 20 20 20 20 3b 3b 20 49 6e 73 74 65    61 64 20 6f 66 20 6f 70 65 6e 69 6e 67 20 62 72  | ........;;.Instead.of.opening.br | 
| 58e0 |  6f 77 73 65 72 2c 20 73 68 6f 77 20 55 52 4c 20    61 6e 64 20 77 61 69 74 20 66 6f 72 20 63 6f 64  | owser,.show.URL.and.wait.for.cod | 
| 5900 |  65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28    75 6e 6c 65 73 73 20 71 75 69 65 74 0a 20 20 20  | e..............(unless.quiet.... | 
| 5920 |  20 20 20 20 20 20 20 20 20 20 20 20 28 61 6c 65    72 74 20 28 66 6f 72 6d 61 74 20 22 50 6c 65 61  | ............(alert.(format."Plea | 
| 5940 |  73 65 20 76 69 73 69 74 20 74 68 69 73 20 55 52    4c 20 74 6f 20 61 75 74 68 6f 72 69 7a 65 3a 5c  | se.visit.this.URL.to.authorize:\ | 
| 5960 |  6e 25 73 5c 6e 5c 6e 41 66 74 65 72 20 61 75 74    68 6f 72 69 7a 61 74 69 6f 6e 2c 20 63 6f 70 79  | n%s\n\nAfter.authorization,.copy | 
| 5980 |  20 74 68 65 20 27 63 6f 64 65 27 20 70 61 72 61    6d 65 74 65 72 20 66 72 6f 6d 20 74 68 65 20 72  | .the.'code'.parameter.from.the.r | 
| 59a0 |  65 64 69 72 65 63 74 20 55 52 4c 20 61 6e 64 20    70 61 73 74 65 20 69 74 20 62 65 6c 6f 77 3a 22  | edirect.URL.and.paste.it.below:" | 
| 59c0 |  0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  | ...............................a | 
| 59e0 |  75 74 68 2d 75 72 6c 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a  | uth-url).......................: | 
| 5a00 |  74 69 74 6c 65 20 22 45 6d 61 63 73 20 4f 41 75    74 68 32 20 6c 6f 67 69 6e 22 0a 20 20 20 20 20  | title."Emacs.OAuth2.login"...... | 
| 5a20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 3a 63 61 74 65 67 6f 72 79 20 27 6f 61 75 74  | .................:category.'oaut | 
| 5a40 |  68 32 2d 61 75 74 6f 29 29 0a 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 3b 3b 20 57 61 69 74 20  | h2-auto))...............;;.Wait. | 
| 5a60 |  66 6f 72 20 75 73 65 72 20 74 6f 20 69 6e 70 75    74 20 74 68 65 20 63 6f 64 65 0a 20 20 20 20 20  | for.user.to.input.the.code...... | 
| 5a80 |  20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 63    6f 64 65 20 28 72 65 61 64 2d 73 74 72 69 6e 67  | ........(let.((code.(read-string | 
| 5aa0 |  20 28 66 6f 72 6d 61 74 20 22 50 6c 65 61 73 65    20 76 69 73 69 74 20 74 68 69 73 20 55 52 4c 20  | .(format."Please.visit.this.URL. | 
| 5ac0 |  74 6f 20 61 75 74 68 6f 72 69 7a 65 3a 5c 6e 25    73 5c 6e 5c 6e 41 66 74 65 72 20 61 75 74 68 6f  | to.authorize:\n%s\n\nAfter.autho | 
| 5ae0 |  72 69 7a 61 74 69 6f 6e 2c 20 63 6f 70 79 20 74    68 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  | rization,.copy.the.code.from.the | 
| 5b00 |  20 72 65 64 69 72 65 63 74 20 55 52 4c 20 61 6e    64 20 70 61 73 74 65 20 69 74 20 68 65 72 65 2e  | .redirect.URL.and.paste.it.here. | 
| 5b20 |  5c 6e 45 6e 74 65 72 20 61 75 74 68 6f 72 69 7a    61 74 69 6f 6e 20 63 6f 64 65 3a 20 22 20 61 75  | \nEnter.authorization.code:.".au | 
| 5b40 |  74 68 2d 75 72 6c 29 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 3b 3b 20 72 65 74  | th-url))))................;;.ret | 
| 5b60 |  75 72 6e 20 74 68 65 20 72 65 73 70 6f 6e 73 65    2c 20 77 69 74 68 20 74 68 65 20 27 72 65 64 69  | urn.the.response,.with.the.'redi | 
| 5b80 |  72 65 63 74 5f 75 72 69 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 72 65  | rect_uri................(cons.re | 
| 5ba0 |  64 69 72 65 63 74 2d 75 72 69 2d 65 6c 74 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | direct-uri-elt.................. | 
| 5bc0 |  20 20 20 20 28 6c 69 73 74 20 28 63 6f 6e 73 20    27 63 6f 64 65 20 63 6f 64 65 29 0a 20 20 20 20  | ....(list.(cons.'code.code)..... | 
| 5be0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 63 6f 6e 73 20 27 72 65  | .......................(cons.'re | 
| 5c00 |  64 69 72 65 63 74 5f 75 72 69 20 72 65 64 69 72    65 63 74 2d 75 72 69 29 0a 20 20 20 20 20 20 20  | direct_uri.redirect-uri)........ | 
| 5c20 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 63 6f 6e 73 20 27 73 74 61 74 65  | ....................(cons.'state | 
| 5c40 |  20 28 63 64 72 20 28 61 73 73 6f 63 20 27 73 74    61 74 65 20 64 61 74 61 2d 61 6c 69 73 74 29 29  | .(cdr.(assoc.'state.data-alist)) | 
| 5c60 |  29 29 29 29 29 29 0a 0a 28 64 65 66 63 6f 6e 73    74 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 75  | ))))))..(defconst.oauth2-auto--u | 
| 5c80 |  72 6c 2d 75 6e 72 65 73 65 72 76 65 64 0a 20 20    22 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f  | rl-unreserved..."abcdefghijklmno | 
| 5ca0 |  70 71 72 73 74 75 76 77 78 79 7a 41 42 43 44 45    46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55  | pqrstuvwxyzABCDEFGHIJKLMNOPQRSTU | 
| 5cc0 |  56 57 58 59 30 31 32 33 34 35 36 37 38 39 2d 5f    22 0a 20 20 22 4c 69 73 74 20 6f 66 20 76 61 6c  | VWXY0123456789-_"..."List.of.val | 
| 5ce0 |  69 64 20 6e 6f 6e 2d 70 61 64 64 69 6e 67 20 63    68 61 72 61 63 74 65 72 73 20 69 6e 20 42 61 73  | id.non-padding.characters.in.Bas | 
| 5d00 |  65 36 34 20 55 52 4c 20 65 6e 63 6f 64 65 64 20    73 74 72 69 6e 67 2e 22 29 0a 0a 28 64 65 66 75  | e64.URL.encoded.string.")..(defu | 
| 5d20 |  6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 72    61 6e 64 6f 6d 2d 73 74 72 69 6e 67 20 28 6c 65  | n.oauth2-auto--random-string.(le | 
| 5d40 |  6e 29 0a 20 20 22 52 65 74 75 72 6e 20 61 20 72    61 6e 64 6f 6d 20 73 74 72 69 6e 67 20 6f 66 20  | n)..."Return.a.random.string.of. | 
| 5d60 |  6c 65 6e 67 74 68 20 4c 45 4e 2e 0a 55 73 65 73    20 6f 6e 6c 79 20 63 68 61 72 61 63 74 65 72 73  | length.LEN..Uses.only.characters | 
| 5d80 |  20 76 61 6c 69 64 20 69 6e 20 74 68 65 20 6f 75    74 70 75 74 20 6f 66 20 60 62 61 73 65 36 34 75  | .valid.in.the.output.of.`base64u | 
| 5da0 |  72 6c 2d 65 6e 63 6f 64 65 2d 73 74 72 69 6e 67    27 2e 22 0a 20 20 3b 20 69 6e 73 70 69 72 65 64  | rl-encode-string'."...;.inspired | 
| 5dc0 |  20 62 79 20 68 74 74 70 3a 2f 2f 78 61 68 6c 65    65 2e 69 6e 66 6f 2f 65 6d 61 63 73 2f 65 6d 61  | .by.http://xahlee.info/emacs/ema | 
| 5de0 |  63 73 2f 65 6c 69 73 70 5f 69 6e 73 65 72 74 5f    72 61 6e 64 6f 6d 5f 6e 75 6d 62 65 72 5f 73 74  | cs/elisp_insert_random_number_st | 
| 5e00 |  72 69 6e 67 2e 68 74 6d 6c 0a 20 20 28 6c 65 74    20 28 28 72 61 6e 64 2d 6c 65 6e 20 28 6c 65 6e  | ring.html...(let.((rand-len.(len | 
| 5e20 |  67 74 68 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d    2d 75 72 6c 2d 75 6e 72 65 73 65 72 76 65 64 29  | gth.oauth2-auto--url-unreserved) | 
| 5e40 |  29 29 0a 20 20 20 28 77 69 74 68 2d 74 65 6d 70    2d 62 75 66 66 65 72 0a 20 20 20 20 20 28 64 6f  | ))....(with-temp-buffer......(do | 
| 5e60 |  74 69 6d 65 73 20 28 5f 6c 20 6c 65 6e 29 0a 20    20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 65  | times.(_l.len)........(insert.(e | 
| 5e80 |  6c 74 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d    75 72 6c 2d 75 6e 72 65 73 65 72 76 65 64 20 28  | lt.oauth2-auto--url-unreserved.( | 
| 5ea0 |  72 61 6e 64 6f 6d 20 72 61 6e 64 2d 6c 65 6e 29    29 29 29 0a 20 20 20 20 20 28 62 75 66 66 65 72  | random.rand-len))))......(buffer | 
| 5ec0 |  2d 73 74 72 69 6e 67 29 29 29 29 0a 0a 28 64 65    66 75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d  | -string))))..(defun.oauth2-auto- | 
| 5ee0 |  2d 62 61 73 65 36 34 75 72 6c 2d 65 6e 63 6f 64    65 2d 73 74 72 69 6e 67 20 28 73 74 72 69 6e 67  | -base64url-encode-string.(string | 
| 5f00 |  20 26 6f 70 74 69 6f 6e 61 6c 20 6e 6f 2d 70 61    64 29 0a 20 20 22 50 61 63 6b 61 67 65 2d 6c 6f  | .&optional.no-pad)..."Package-lo | 
| 5f20 |  63 61 6c 20 76 65 72 73 69 6f 6e 20 6f 66 20 e2    80 98 62 61 73 65 36 34 75 72 6c 2d 65 6e 63 6f  | cal.version.of....base64url-enco | 
| 5f40 |  64 65 2d 73 74 72 69 6e 67 e2 80 99 2e 0a 0a 42    61 73 65 36 34 75 72 6c 2d 65 6e 63 6f 64 65 20  | de-string......Base64url-encode. | 
| 5f60 |  53 54 52 49 4e 47 20 61 6e 64 20 72 65 74 75 72    6e 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 0a 4f  | STRING.and.return.the.result...O | 
| 5f80 |  70 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 20 61    72 67 75 6d 65 6e 74 20 4e 4f 2d 50 41 44 20 6d  | ptional.second.argument.NO-PAD.m | 
| 5fa0 |  65 61 6e 73 20 64 6f 20 6e 6f 74 20 61 64 64 20    70 61 64 64 69 6e 67 20 63 68 61 72 20 3d 2e 0a  | eans.do.not.add.padding.char.=.. | 
| 5fc0 |  0a 54 68 69 73 20 70 72 6f 64 75 63 65 73 20 74    68 65 20 55 52 4c 20 76 61 72 69 61 6e 74 20 6f  | .This.produces.the.URL.variant.o | 
| 5fe0 |  66 20 62 61 73 65 20 36 34 20 65 6e 63 6f 64 69    6e 67 20 64 65 66 69 6e 65 64 20 69 6e 20 52 46  | f.base.64.encoding.defined.in.RF | 
| 6000 |  43 20 34 36 34 38 2e 0a 0a 45 78 69 73 74 73 20    62 65 63 61 75 73 65 20 74 68 69 73 20 70 61 63  | C.4648...Exists.because.this.pac | 
| 6020 |  6b 61 67 65 20 69 73 20 63 6f 6d 70 61 74 69 62    6c 65 20 77 69 74 68 20 45 6d 61 63 73 20 32 36  | kage.is.compatible.with.Emacs.26 | 
| 6040 |  2e 31 2c 20 62 75 74 0a e2 80 98 62 61 73 65 36    34 75 72 6c 2d 65 6e 63 6f 64 65 2d 73 74 72 69  | .1,.but....base64url-encode-stri | 
| 6060 |  6e 67 e2 80 99 20 77 61 73 20 6f 6e 6c 79 20 61    64 64 65 64 20 69 6e 20 45 6d 61 63 73 20 32 37  | ng....was.only.added.in.Emacs.27 | 
| 6080 |  2e 31 2e 22 0a 20 20 28 69 66 20 28 66 62 6f 75    6e 64 70 20 27 62 61 73 65 36 34 75 72 6c 2d 65  | .1."...(if.(fboundp.'base64url-e | 
| 60a0 |  6e 63 6f 64 65 2d 73 74 72 69 6e 67 29 0a 20 20    20 20 20 20 3b 3b 20 55 73 65 20 66 75 6e 63 61  | ncode-string).......;;.Use.funca | 
| 60c0 |  6c 6c 20 74 6f 20 73 69 6c 65 6e 63 65 20 66 6c    79 63 68 65 63 6b 2e 0a 20 20 20 20 20 20 28 66  | ll.to.silence.flycheck........(f | 
| 60e0 |  75 6e 63 61 6c 6c 20 27 62 61 73 65 36 34 75 72    6c 2d 65 6e 63 6f 64 65 2d 73 74 72 69 6e 67 20  | uncall.'base64url-encode-string. | 
| 6100 |  73 74 72 69 6e 67 20 6e 6f 2d 70 61 64 29 0a 20    20 20 20 28 6c 65 74 2a 20 28 28 65 6e 63 20 28  | string.no-pad).....(let*.((enc.( | 
| 6120 |  62 61 73 65 36 34 2d 65 6e 63 6f 64 65 2d 73 74    72 69 6e 67 20 73 74 72 69 6e 67 20 74 29 29 0a  | base64-encode-string.string.t)). | 
| 6140 |  20 20 20 20 20 20 20 20 20 20 20 28 65 6e 63 20    28 72 65 70 6c 61 63 65 2d 72 65 67 65 78 70 2d  | ...........(enc.(replace-regexp- | 
| 6160 |  69 6e 2d 73 74 72 69 6e 67 20 22 2b 22 20 22 2d    22 20 65 6e 63 29 29 0a 20 20 20 20 20 20 20 20  | in-string."+"."-".enc))......... | 
| 6180 |  20 20 20 28 65 6e 63 20 28 72 65 70 6c 61 63 65    2d 72 65 67 65 78 70 2d 69 6e 2d 73 74 72 69 6e  | ...(enc.(replace-regexp-in-strin | 
| 61a0 |  67 20 22 2f 22 20 22 5f 22 20 65 6e 63 29 29 29    0a 20 20 20 20 20 20 28 69 66 20 6e 6f 2d 70 61  | g."/"."_".enc))).......(if.no-pa | 
| 61c0 |  64 0a 20 20 20 20 20 20 20 20 20 20 28 72 65 70    6c 61 63 65 2d 72 65 67 65 78 70 2d 69 6e 2d 73  | d...........(replace-regexp-in-s | 
| 61e0 |  74 72 69 6e 67 20 22 3d 22 20 22 22 20 65 6e 63    29 0a 20 20 20 20 20 20 20 20 65 6e 63 29 29 29  | tring."="."".enc).........enc))) | 
| 6200 |  29 0a 0a 3b 3b 20 43 6f 6e 74 72 6f 6c 20 66 6c    6f 77 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61  | )..;;.Control.flow.to.authentica | 
| 6220 |  74 65 20 63 6c 69 65 6e 74 20 74 6f 20 74 68 65    20 4f 41 75 74 68 32 20 70 72 6f 76 69 64 65 72  | te.client.to.the.OAuth2.provider | 
| 6240 |  73 0a 0a 0a 28 61 69 6f 2d 64 65 66 75 6e 20 6f    61 75 74 68 32 2d 61 75 74 6f 2d 72 65 66 72 65  | s...(aio-defun.oauth2-auto-refre | 
| 6260 |  73 68 2d 6f 72 2d 61 75 74 68 65 6e 74 69 63 61    74 65 20 28 75 73 65 72 6e 61 6d 65 20 70 72 6f  | sh-or-authenticate.(username.pro | 
| 6280 |  76 69 64 65 72 20 70 6c 69 73 74 29 0a 20 20 22    54 72 79 20 74 6f 20 72 65 66 72 65 73 68 2c 20  | vider.plist)..."Try.to.refresh,. | 
| 62a0 |  61 6e 64 20 69 66 20 72 65 66 72 65 73 68 69 6e    67 20 66 61 69 6c 73 2c 20 61 75 74 68 65 6e 74  | and.if.refreshing.fails,.authent | 
| 62c0 |  69 63 61 74 65 2e 0a 46 6f 72 20 55 53 45 52 4e    41 4d 45 2c 20 50 52 4f 56 49 44 45 52 2c 20 61  | icate..For.USERNAME,.PROVIDER,.a | 
| 62e0 |  6e 64 20 50 4c 49 53 54 20 73 65 65 20 e2 80 98    6f 61 75 74 68 32 2d 61 75 74 6f 2d 72 65 66 72  | nd.PLIST.see....oauth2-auto-refr | 
| 6300 |  65 73 68 e2 80 99 2e 22 0a 20 20 28 6c 65 74 2a    20 28 28 70 72 6f 6d 69 73 65 20 28 6f 61 75 74  | esh...."...(let*.((promise.(oaut | 
| 6320 |  68 32 2d 61 75 74 6f 2d 72 65 66 72 65 73 68 20    75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65  | h2-auto-refresh.username.provide | 
| 6340 |  72 20 70 6c 69 73 74 29 29 0a 20 20 20 20 20 20    20 20 20 28 72 65 73 75 6c 74 20 28 61 69 6f 2d  | r.plist))..........(result.(aio- | 
| 6360 |  61 77 61 69 74 20 28 61 69 6f 2d 63 61 74 63 68    20 70 72 6f 6d 69 73 65 29 29 29 29 0a 20 20 20  | await.(aio-catch.promise)))).... | 
| 6380 |  20 28 69 66 20 28 65 71 20 28 63 61 72 20 72 65    73 75 6c 74 29 20 3a 73 75 63 63 65 73 73 29 0a  | .(if.(eq.(car.result).:success). | 
| 63a0 |  20 20 20 20 20 20 20 20 3b 20 49 66 20 73 75 63    63 65 65 64 65 64 2c 20 72 65 74 75 72 6e 20 74  | ........;.If.succeeded,.return.t | 
| 63c0 |  68 65 20 72 65 73 75 6c 74 0a 20 20 20 20 20 20    20 20 28 63 64 72 20 72 65 73 75 6c 74 29 0a 20  | he.result.........(cdr.result).. | 
| 63e0 |  20 20 20 20 20 3b 20 49 66 20 66 61 69 6c 65 64    2c 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 69  | .....;.If.failed,.authenticate.i | 
| 6400 |  6e 73 74 65 61 64 0a 20 20 20 20 20 20 28 61 69    6f 2d 61 77 61 69 74 20 28 6f 61 75 74 68 32 2d  | nstead.......(aio-await.(oauth2- | 
| 6420 |  61 75 74 6f 2d 61 75 74 68 65 6e 74 69 63 61 74    65 20 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69  | auto-authenticate.username.provi | 
| 6440 |  64 65 72 29 29 29 29 29 0a 0a 28 61 69 6f 2d 64    65 66 75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f  | der)))))..(aio-defun.oauth2-auto | 
| 6460 |  2d 61 75 74 68 65 6e 74 69 63 61 74 65 20 28 75    73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65 72  | -authenticate.(username.provider | 
| 6480 |  29 0a 20 20 22 41 75 74 68 65 6e 74 69 63 61 74    65 73 20 55 53 45 52 4e 41 4d 45 20 75 73 69 6e  | )..."Authenticates.USERNAME.usin | 
| 64a0 |  67 20 50 52 4f 56 49 44 45 52 20 61 6e 64 20 72    65 74 75 72 6e 73 20 61 20 70 6c 69 73 74 2e 22  | g.PROVIDER.and.returns.a.plist." | 
| 64c0 |  0a 20 20 28 6c 65 74 2a 20 28 28 73 74 61 74 65    20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 72  | ...(let*.((state.(oauth2-auto--r | 
| 64e0 |  61 6e 64 6f 6d 2d 73 74 72 69 6e 67 20 38 29 29    0a 20 20 20 20 20 20 20 20 20 28 63 6f 64 65 2d  | andom-string.8))..........(code- | 
| 6500 |  76 65 72 69 66 69 65 72 20 28 6f 61 75 74 68 32    2d 61 75 74 6f 2d 2d 72 61 6e 64 6f 6d 2d 73 74  | verifier.(oauth2-auto--random-st | 
| 6520 |  72 69 6e 67 20 34 33 29 29 0a 20 20 20 20 20 20    20 20 20 28 62 69 6e 61 72 79 2d 63 6f 64 65 2d  | ring.43))..........(binary-code- | 
| 6540 |  63 68 61 6c 6c 65 6e 67 65 20 28 73 65 63 75 72    65 2d 68 61 73 68 20 27 73 68 61 32 35 36 20 63  | challenge.(secure-hash.'sha256.c | 
| 6560 |  6f 64 65 2d 76 65 72 69 66 69 65 72 20 6e 69 6c    20 6e 69 6c 20 74 29 29 0a 20 20 20 20 20 20 20  | ode-verifier.nil.nil.t))........ | 
| 6580 |  20 20 28 72 65 73 70 6f 6e 73 65 20 28 61 69 6f    2d 61 77 61 69 74 0a 20 20 20 20 20 20 20 20 20  | ..(response.(aio-await.......... | 
| 65a0 |  20 20 20 20 20 20 20 20 20 20 20 28 6f 61 75 74    68 32 2d 61 75 74 6f 2d 2d 62 72 6f 77 73 65 72  | ...........(oauth2-auto--browser | 
| 65c0 |  2d 72 65 71 75 65 73 74 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72  | -request......................pr | 
| 65e0 |  6f 76 69 64 65 72 20 27 61 75 74 68 6f 72 69 7a    65 5f 75 72 6c 0a 20 20 20 20 20 20 20 20 20 20  | ovider.'authorize_url........... | 
| 6600 |  20 20 20 20 20 20 20 20 20 20 20 27 28 63 6c 69    65 6e 74 5f 69 64 20 74 65 6e 61 6e 74 20 73 63  | ...........'(client_id.tenant.sc | 
| 6620 |  6f 70 65 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 60 28 28 6c 6f 67  | ope)......................`((log | 
| 6640 |  69 6e 5f 68 69 6e 74 20 2e 20 2c 75 73 65 72 6e    61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20  | in_hint...,username)............ | 
| 6660 |  20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 73    70 6f 6e 73 65 5f 74 79 70 65 20 2e 20 22 63 6f  | ............(response_type..."co | 
| 6680 |  64 65 22 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 73  | de")........................(res | 
| 66a0 |  70 6f 6e 73 65 5f 6d 6f 64 65 20 2e 20 22 71 75    65 72 79 22 29 20 3b 3b 20 6d 69 63 72 6f 73 6f  | ponse_mode..."query").;;.microso | 
| 66c0 |  66 74 2d 6f 6e 6c 79 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | ft-only........................( | 
| 66e0 |  61 63 63 65 73 73 5f 74 79 70 65 20 2e 20 22 6f    66 66 6c 69 6e 65 22 29 20 3b 3b 20 67 6f 6f 67  | access_type..."offline").;;.goog | 
| 6700 |  6c 65 2d 6f 6e 6c 79 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  | le-only........................( | 
| 6720 |  73 74 61 74 65 20 2e 20 2c 73 74 61 74 65 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  | state...,state)................. | 
| 6740 |  20 20 20 20 20 20 20 28 63 6f 64 65 5f 63 68 61    6c 6c 65 6e 67 65 20 2e 20 2c 28 6f 61 75 74 68  | .......(code_challenge...,(oauth | 
| 6760 |  32 2d 61 75 74 6f 2d 2d 62 61 73 65 36 34 75 72    6c 2d 65 6e 63 6f 64 65 2d 73 74 72 69 6e 67 20  | 2-auto--base64url-encode-string. | 
| 6780 |  62 69 6e 61 72 79 2d 63 6f 64 65 2d 63 68 61 6c    6c 65 6e 67 65 20 74 29 29 0a 20 20 20 20 20 20  | binary-code-challenge.t))....... | 
| 67a0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 63 6f 64 65 5f 63 68 61 6c 6c 65 6e 67 65  | .................(code_challenge | 
| 67c0 |  5f 6d 65 74 68 6f 64 20 2e 20 22 53 32 35 36 22    29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 28  | _method..."S256")))))..........( | 
| 67e0 |  72 65 73 70 6f 6e 73 65 2d 73 74 61 74 65 20 28    63 64 72 20 28 61 73 73 6f 63 20 27 73 74 61 74  | response-state.(cdr.(assoc.'stat | 
| 6800 |  65 20 72 65 73 70 6f 6e 73 65 29 29 29 0a 20 20    20 20 20 20 20 20 20 28 72 65 64 69 72 65 63 74  | e.response)))..........(redirect | 
| 6820 |  2d 75 72 69 20 28 63 64 72 20 28 61 73 73 6f 63    20 27 72 65 64 69 72 65 63 74 5f 75 72 69 20 72  | -uri.(cdr.(assoc.'redirect_uri.r | 
| 6840 |  65 73 70 6f 6e 73 65 29 29 29 0a 20 20 20 20 20    20 20 20 20 28 63 6f 64 65 20 28 63 64 72 20 28  | esponse)))..........(code.(cdr.( | 
| 6860 |  61 73 73 6f 63 20 27 63 6f 64 65 20 72 65 73 70    6f 6e 73 65 29 29 29 29 0a 0a 20 20 20 20 3b 20  | assoc.'code.response))))......;. | 
| 6880 |  56 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20    72 65 74 75 72 6e 20 73 74 61 74 65 20 6d 61 74  | Verify.that.the.return.state.mat | 
| 68a0 |  63 68 65 73 2e 0a 20 20 20 20 3b 20 68 74 74 70    73 3a 2f 2f 64 6f 63 73 2e 6d 69 63 72 6f 73 6f  | ches......;.https://docs.microso | 
| 68c0 |  66 74 2e 63 6f 6d 2f 65 6e 2d 75 73 2f 61 7a 75    72 65 2f 61 63 74 69 76 65 2d 64 69 72 65 63 74  | ft.com/en-us/azure/active-direct | 
| 68e0 |  6f 72 79 2f 64 65 76 65 6c 6f 70 2f 76 32 2d 6f    61 75 74 68 32 2d 61 75 74 68 2d 63 6f 64 65 2d  | ory/develop/v2-oauth2-auth-code- | 
| 6900 |  66 6c 6f 77 23 73 75 63 63 65 73 73 66 75 6c 2d    72 65 73 70 6f 6e 73 65 0a 20 20 20 20 28 75 6e  | flow#successful-response.....(un | 
| 6920 |  6c 65 73 73 20 28 65 71 75 61 6c 20 73 74 61 74    65 20 72 65 73 70 6f 6e 73 65 2d 73 74 61 74 65  | less.(equal.state.response-state | 
| 6940 |  29 0a 20 20 20 20 20 20 28 65 72 72 6f 72 0a 20    20 20 20 20 20 20 22 53 74 61 74 65 20 73 65 6e  | ).......(error........"State.sen | 
| 6960 |  74 20 61 6e 64 20 72 65 74 75 72 6e 65 64 20 64    6f 20 6e 6f 74 20 6d 61 74 63 68 20 2d 20 73 65  | t.and.returned.do.not.match.-.se | 
| 6980 |  63 75 72 69 74 79 20 72 69 73 6b 3a 20 73 74 61    74 65 3d 25 73 20 72 65 73 70 6f 6e 73 65 5f 73  | curity.risk:.state=%s.response_s | 
| 69a0 |  74 61 74 65 3d 25 73 22 0a 20 20 20 20 20 20 20    73 74 61 74 65 20 72 65 73 70 6f 6e 73 65 2d 73  | tate=%s"........state.response-s | 
| 69c0 |  74 61 74 65 29 29 0a 0a 20 20 20 20 28 6f 61 75    74 68 32 2d 61 75 74 6f 2d 2d 6d 61 6b 65 2d 70  | tate))......(oauth2-auto--make-p | 
| 69e0 |  6c 69 73 74 0a 20 20 20 20 20 28 61 69 6f 2d 61    77 61 69 74 0a 20 20 20 20 20 20 28 6f 61 75 74  | list......(aio-await.......(oaut | 
| 6a00 |  68 32 2d 61 75 74 6f 2d 2d 72 65 71 75 65 73 74    0a 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 72  | h2-auto--request........provider | 
| 6a20 |  20 27 74 6f 6b 65 6e 5f 75 72 6c 0a 20 20 20 20    20 20 20 27 28 63 6c 69 65 6e 74 5f 69 64 20 74  | .'token_url........'(client_id.t | 
| 6a40 |  65 6e 61 6e 74 20 63 6c 69 65 6e 74 5f 73 65 63    72 65 74 29 0a 20 20 20 20 20 20 20 60 28 28 72  | enant.client_secret)........`((r | 
| 6a60 |  65 64 69 72 65 63 74 5f 75 72 69 20 2e 20 2c 72    65 64 69 72 65 63 74 2d 75 72 69 29 0a 20 20 20  | edirect_uri...,redirect-uri).... | 
| 6a80 |  20 20 20 20 20 20 28 63 6f 64 65 20 2e 20 2c 63    6f 64 65 29 0a 20 20 20 20 20 20 20 20 20 28 67  | ......(code...,code)..........(g | 
| 6aa0 |  72 61 6e 74 5f 74 79 70 65 20 2e 20 22 61 75 74    68 6f 72 69 7a 61 74 69 6f 6e 5f 63 6f 64 65 22  | rant_type..."authorization_code" | 
| 6ac0 |  29 0a 20 20 20 20 20 20 20 20 20 28 63 6f 64 65    5f 76 65 72 69 66 69 65 72 20 2e 20 2c 63 6f 64  | )..........(code_verifier...,cod | 
| 6ae0 |  65 2d 76 65 72 69 66 69 65 72 29 29 29 29 0a 20    20 20 20 20 6e 69 6c 29 29 29 0a 0a 28 61 69 6f  | e-verifier))))......nil)))..(aio | 
| 6b00 |  2d 64 65 66 75 6e 20 6f 61 75 74 68 32 2d 61 75    74 6f 2d 72 65 66 72 65 73 68 20 28 5f 75 73 65  | -defun.oauth2-auto-refresh.(_use | 
| 6b20 |  72 6e 61 6d 65 20 70 72 6f 76 69 64 65 72 20 70    6c 69 73 74 29 0a 20 20 22 52 65 66 72 65 73 68  | rname.provider.plist)..."Refresh | 
| 6b40 |  20 61 63 63 65 73 73 20 6f 66 20 55 53 45 52 4e    41 4d 45 20 75 73 69 6e 67 20 50 52 4f 56 49 44  | .access.of.USERNAME.using.PROVID | 
| 6b60 |  45 52 20 75 73 69 6e 67 20 74 68 65 20 72 65 66    72 65 73 68 2d 74 6f 6b 65 6e 20 69 6e 20 50 4c  | ER.using.the.refresh-token.in.PL | 
| 6b80 |  49 53 54 2e 0a 52 65 74 75 72 6e 20 74 68 65 20    72 65 66 72 65 73 68 65 64 20 70 6c 69 73 74 2e  | IST..Return.the.refreshed.plist. | 
| 6ba0 |  22 0a 20 20 28 6c 65 74 20 28 28 72 65 66 72 65    73 68 2d 74 6f 6b 65 6e 20 28 70 6c 69 73 74 2d  | "...(let.((refresh-token.(plist- | 
| 6bc0 |  67 65 74 20 70 6c 69 73 74 20 3a 72 65 66 72 65    73 68 2d 74 6f 6b 65 6e 29 29 29 0a 20 20 20 20  | get.plist.:refresh-token)))..... | 
| 6be0 |  28 75 6e 6c 65 73 73 20 72 65 66 72 65 73 68 2d    74 6f 6b 65 6e 0a 20 20 20 20 20 20 28 65 72 72  | (unless.refresh-token.......(err | 
| 6c00 |  6f 72 20 22 52 65 66 72 65 73 68 20 74 6f 6b 65    6e 20 69 73 20 6e 69 6c 20 69 6e 20 70 6c 69 73  | or."Refresh.token.is.nil.in.plis | 
| 6c20 |  74 3d 25 73 22 20 28 70 70 2d 74 6f 2d 73 74 72    69 6e 67 20 70 6c 69 73 74 29 29 29 0a 0a 20 20  | t=%s".(pp-to-string.plist))).... | 
| 6c40 |  20 20 3b 20 52 65 66 72 65 73 68 20 61 6e 20 6f    61 75 74 68 32 2d 74 6f 6b 65 6e 0a 20 20 20 20  | ..;.Refresh.an.oauth2-token..... | 
| 6c60 |  28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 6d 61    6b 65 2d 70 6c 69 73 74 0a 20 20 20 20 20 28 61  | (oauth2-auto--make-plist......(a | 
| 6c80 |  69 6f 2d 61 77 61 69 74 20 28 6f 61 75 74 68 32    2d 61 75 74 6f 2d 2d 72 65 71 75 65 73 74 0a 20  | io-await.(oauth2-auto--request.. | 
| 6ca0 |  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    70 72 6f 76 69 64 65 72 20 27 74 6f 6b 65 6e 5f  | ................provider.'token_ | 
| 6cc0 |  75 72 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 27 28 63 6c 69 65 6e 74 5f 69 64  | url..................'(client_id | 
| 6ce0 |  20 74 65 6e 61 6e 74 20 63 6c 69 65 6e 74 5f 73    65 63 72 65 74 29 0a 20 20 20 20 20 20 20 20 20  | .tenant.client_secret).......... | 
| 6d00 |  20 20 20 20 20 20 20 20 60 28 28 72 65 66 72 65    73 68 5f 74 6f 6b 65 6e 20 2e 20 2c 72 65 66 72  | ........`((refresh_token...,refr | 
| 6d20 |  65 73 68 2d 74 6f 6b 65 6e 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67  | esh-token)....................(g | 
| 6d40 |  72 61 6e 74 5f 74 79 70 65 20 2e 20 22 72 65 66    72 65 73 68 5f 74 6f 6b 65 6e 22 29 29 29 29 0a  | rant_type..."refresh_token")))). | 
| 6d60 |  20 20 20 20 20 70 6c 69 73 74 29 29 29 0a 0a 28    70 72 6f 76 69 64 65 20 27 6f 61 75 74 68 32 2d  | .....plist)))..(provide.'oauth2- | 
| 6d80 |  61 75 74 6f 29 0a 0a 3b 3b 3b 20 6f 61 75 74 68    32 2d 61 75 74 6f 2e 65 6c 20 65 6e 64 73 20 68  | auto)..;;;.oauth2-auto.el.ends.h | 
| 6da0 |  65 72 65 0a 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ere............................. | 
| 6dc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6de0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6e00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6e20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6e40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6e60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6e80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6ea0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6ec0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6ee0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6f00 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6f20 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6f40 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6f60 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6f80 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6fa0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6fc0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 6fe0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7000 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7020 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7040 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7060 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7080 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 70a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 70c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 70e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7100 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7120 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7140 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7160 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7180 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 71a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 71c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 71e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7200 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7220 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7240 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7260 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7280 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 72a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 72c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 72e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7300 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7320 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7340 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7360 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7380 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 73a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 73c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 73e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7400 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7420 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7440 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7460 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7480 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 74a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 74c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 74e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7500 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7520 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7540 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7560 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7580 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 75a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 75c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 75e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7600 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7620 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7640 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7660 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7680 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 76a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 76c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 76e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7700 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7720 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7740 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7760 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 7780 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 77a0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 77c0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ | 
| 77e0 |  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................................ |